# 自定义进程 [hyperf/process](https://github.com/hyperf/process) 可以添加一个用户自定义的工作进程,此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。在 Server 启动时会自动创建进程,并执行指定的子进程函数,进程意外退出时,Server 会重新拉起进程。 ## 创建一个自定义进程 在任意位置实现一个继承 `Hyperf\Process\AbstractProcess` 的子类,并实现接口方法 `handle(): void`,方法内实现您的逻辑代码,我们通过代码来举例: ```php 使用 `#[Process]` 注解时需 `use Hyperf\Process\Annotation\Process;` 命名空间; ## 为进程启动加上条件 有些时候,并不是所有时候都应该启动一个自定义进程,一个自定义进程的启动与否可能会根据某些配置或者某些条件来决定,我们可以通过在自定义进程类内重写 `isEnable(): bool` 方法来实现,默认返回 `true`,即会跟随服务一同启动,如方法返回 `false`,则服务启动时不会启动该自定义进程。 ```php container->get(StdoutLoggerInterface::class); while (true) { $redis = $this->container->get(\Redis::class); $count = $redis->llen('queue:failed'); if ($count > 0) { $logger->warning('The num of failed queue is ' . $count); } sleep(1); } } } ``` 如果使用了异步 IO,没办法将逻辑写到循环里时,可以尝试以下写法 ```php