因此我从命令行运行了一些 PHP 脚本,并想停止它们运行。
我跑了
$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767
然后跑了
$ ps aux | grep php
再次检查进程是否已经终止,但得到这种输出:
jon 8754 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 8767 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 12275 0.0 0.0 4156 892 pts/1 S+ 11:27 0:00 grep --color=auto php
我查了一下 T 的意思在状态栏中发现它表示已停止,但我不明白这意味着该进程正在执行什么。
我知道你可以创建自己的信号处理在 PHP 中,但我没有这样做过,所以当 PHP 收到SIGTERM 信号它有什么作用?
停止的进程正在做什么(如果有的话)?
答案1
这意味着该进程已经收到一个STOP
信号,并且在收到信号之前不会执行任何操作CONT
,甚至不会终止。
最常见的STOP
信号源是用户^z
在进程处于前台时点击,CONT
之后发送的常见方式是键入fg
或bg
分别继续在前台和后台运行进程。
发送STOP
给进程的另一种方式是kill -STOP $pid
。类似地,CONT
可以使用 发送给进程kill -CONT $pid
。
由于您TERM
向进程发送了信号,我假设您希望它们终止。要实现这一点,进程必须接收CONT
信号。您可以通过kill -CONT 8754 8767
在终端窗口中输入来发送这些信号。
答案2
SIGSTOP
Linux/Unix 中的停止进程是接收暂停信号( / )的进程/任务,SIGTSTP
该信号告诉内核不要对其执行任何处理,因为它已停止,并且只有在发送信号后才能恢复执行SIGCONT
。
基本上,停止的进程等待来自内核的继续信号,类似地,暂停的进程等待来自内核的唤醒条件。
图片来源:理工学院
task_struct
Linux 内核中的每个进程都由一个数据结构表示,每个task
向量由指向每个 的指针数组组成task_struct
。它描述系统中的一个进程或任务(unrunnable
,runnable
或stopped
)。请参阅:流程和Linux 数据结构) 更多细节。
也可以看看:Linux 内核:进程管理