函数passthru()
生成一个 shell 来运行你的命令,然后阻塞直到 passthru 进程返回。这些是具有不同进程 ID 的独立进程,而不是运行脚本的 php 解释器。您可以终止脚本,但不会终止它启动的进程。
但是,生成的进程具有相同的进程组 ID (PGID),您可以使用它来杀死它们或向它们发送任何其他信号。在我们的例子中,PGID 与 php 脚本的进程 ID (PID) 相同。
要查看 PGID,您可以执行以下命令:ps axjf,您将获得类似以下内容:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
24077 12484 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ php sleepScript.php
12484 12486 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ sh -c sleep 500
12486 12487 12484 24077 pts/9 12484 S+ 1000 0:00 | \_ sleep 500
我们示例中的 PGID 是 12484(与 php 脚本的 PID 相同)并且要向该组发送终止信号,请使用 PGID 前面带有负号的 kill 命令,即:
kill -15 -24077
您将终止所有三个进程。