Linux中停止的进程是什么?


12

因此,我从命令行运行了一些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的含义,发现它的意思是Stopped,但是我不明白该过程在做什么。

我知道您可以在PHP中创建自己的信号处理,但是我还没有做到这一点,因此,当PHP收到SIGTERM信号时,它会做什么?

停止的进程在做什么(如果有)?

Answers:


15

这意味着该进程已接收到STOP信号,在接收到CONT信号之前甚至不会终止也不会做任何事情。

最常见的STOP信号源是用户^z在进程处于前台时点击,而发送CONT后续消息的常见方式是键入fgbg继续在前台和后台继续进程。

发送STOP到进程的另一种方法是kill -STOP $pid。同样,CONT可以使用发送到进程kill -CONT $pid

由于您已向TERM进程发送信号,因此我假设您希望它们终止。为此,流程必须接收CONT信号。您可以通过kill -CONT 8754 8767在终端窗口中键入来发送这些消息。


发送CONT信号是否允许脚本运行直到完成?还是会导致脚本立即终止?
2012年

收到CONT后,该过程将继续执行其操作(在STOP之前)。但是,如果您kill $pid在终止时发送了一个TERM(例如),它将(迟延地)响应该TERM并终止。
Eroen 2012年

嗯,所以我通过运行发送了TERM,kill 8754这应该导致进程最终终止,对吧?您知道进程即将终止时处于哪个状态吗?假设进程进入STOP状态,就好像它已经从接收到STOP信号一样kill -STOP 8754,如果它发送了TERM信号,是否也会发生这种情况?
2012年

停止的过程TERM直到有继续的信号才会终止。KILL即使收到停止信号,它也会立即终止。我假设一个进程终止时将处于运行状态。我对PHP不太熟悉,不知道如何告诉您进程为什么停止,对不起。不过,通常情况下,进程不会停止而是在接收时终止TERM
Eroen 2012年

4

在Linux / Unix中,已停止的进程是一个进程/任务,它接收到挂起信号(SIGSTOP/ SIGTSTP),该信号指示内核由于已停止而对其不执行任何处理,并且仅在发送SIGCONT信号后才能恢复执行。

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

Linux内核进程状态:“就绪”,“正在运行”,“已停止”,“已暂停”,“已跟踪”,“僵尸”

图片来源:polytechnique.fr


Linux内核中的每个进程都由一个task_struct数据结构表示,每个task向量都包含指向每个的指针数组task_struct。它描述了系统流程或任务(无论它是unrunnablerunnablestopped)。有关更多详细信息,请参见:进程Linux数据结构)。

另请参阅:Linux内核:流程管理


@Jus感谢您的举报,我已对其进行更正。
kenorb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.