## 在 `Supervisor ` 中使用 在 `supervisor ` 中使用 `ProcessPoolTaskExecutor ` 时的一些疑问。 ### 修改代码后如何快速重启 **错误的方法:** 直接使用 `supervisor ` 的重启命令 ```shell supervisorctl restart program_name ``` 如果 `ProcessPoolTaskExecutor ` 的进程队列中有很多未处理完的任务,主进程会要等待全部任务处理完成才会退出,所以这个命令会 **卡住很久**,在修改代码需要立即重启进程的时候这个等待显然难以接收的。 **正确的方法:** ```shell // 使用 -f 参数强制退出守护进程 mix-daemon single stop -f ``` 以上命令会找到守护程序对应的 PID,并发送 `kill -s SIGUSR1 <PID>` 命令,让进程立即退出 (这个退出是优雅的,只是进程队列的数据没有处理完成,这些数据在内存中,在新进程启动时可继续使用,不会丢失),这时,由于 `supervisor` 监听到这个进程退出了,就会立即重启一个新的进程,这时启动的新进程就是新的代码了,如此就完成了一次修改代码后的快速重启。 [>> 到 GitHub 查看强制退出实现源码 <<](https://github.com/mixstart/mixphp/blob/master/apps/daemon/commands/BaseCommand.php#L67)