Linux 中停止的进程是什么?

Linux 中停止的进程是什么?

因此我从命令行运行了一些 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之后发送的常见方式是键入fgbg分别继续在前台和后台运行进程。

发送STOP给进程的另一种方式是kill -STOP $pid。类似地,CONT可以使用 发送给进程kill -CONT $pid

由于您TERM向进程发送了信号,我假设您希望它们终止。要实现这一点,进程必须接收CONT信号。您可以通过kill -CONT 8754 8767在终端窗口中输入来发送这些信号。

答案2

SIGSTOPLinux/Unix 中的停止进程是接收暂停信号( / )的进程/任务,SIGTSTP该信号告诉内核不要对其执行任何处理,因为它已停止,并且只有在发送信号后才能恢复执行SIGCONT

基本上,停止的进程等待来自内核的继续信号,类似地,暂停的进程等待来自内核的唤醒条件。

Linux 内核进程状态:就绪、运行、停止、暂停、跟踪、僵尸

图片来源:理工学院


task_structLinux 内核中的每个进程都由一个数据结构表示,每个task向量由指向每个 的指针数组组成task_struct。它描述系统中的一个进程或任务(unrunnablerunnablestopped)。请参阅:流程Linux 数据结构) 更多细节。

也可以看看:Linux 内核:进程管理

相关内容