场景这样的使用 symfony process 启动了一个 php 进程。
symfony 启动使用的命令是:
$commandline = '{ ('.$commandline.') /dev/null & } 3&3; wait $pid 2>/dev/null; code=$?; echo $code >&3; exit $code'
启动成功后进程树类似:(假设执行的是 php -r "sleep(10);")
|---master
|-----|---(PID:100) sh -c php -r "sleep(10);"
|-----------|---(PID:101) php -r "sleep(10);"
当在 master 中执行 posix_kill(101, 15) sigterm后。sh 立刻退出了。剩余一个 php -r "sleep(10);" 还在跑。
通过这种形式启动的进程应该怎么“优雅”的退出呢?
symfony
Process::fromShellCommandline(string) 通过 sh -c ,会产生子进程。
而 new Process(array[php, "-r", "xxx"]) 不会产生子进程。结贴。