Unix/Linux中的进程状态是什么?

Unix/Linux中的进程状态是什么?

时间:2021-1-31 作者:admin

在Unix/Linux操作系统中,进程可以处于以下状态之一:

  1. 运行和运行
  2. 可中断睡眠
  3. 不间断睡眠
  4. 僵尸

让我们在本文中讨论这些状态。

Unix/Linux中的进程状态是什么?

 

图:过程状态转换图

 

运行和运行

当CPU执行一个进程时,它将处于运行状态。当进程没有等待任何资源并准备由CPU执行时,它将处于可运行状态。

沉睡

休眠状态指示进程当前正在等待某些资源(例如等待I/O、等待锁、使进程休眠的应用程序代码等)。有两种睡眠过程:

  • 可中断睡眠:当进程处于可中断睡眠状态时,它将从睡眠中醒来,并处理发送给它的新信号。
  • 不间断睡眠:当进程处于不间断睡眠状态时,即使向它发送了新的信号,它也不会从睡眠中醒来。

如何扼杀睡眠过程?

如果进程处于可中断的睡眠状态,则向进程发出SIGKILL信号(即‘kill-9’),将立即终止该进程。另一方面,如果进程处于不间断睡眠状态,则发出SIGKILL信号不会立即终止它。只有在完成休眠/等待操作后,进程才会终止。因此,如果您想要在长时间内终止处于不间断睡眠状态的进程,那么您必须重新启动系统;没有其他方法了。

停住

“停止”状态指示进程已被暂停,不再继续运行。在Linux中,当您发出‘Ctrl+Z’命令时,它将向进程发出一个SIGSTOP信号。当进程接收到此信号时,它将被暂停/停止进一步执行。当进程处于停止状态时,它将只处理SIGKILL和SIGCONT信号。SIGKILL信号将终止进程,但SIGCONT信号将使进程返回运行/运行状态。

僵尸

当进程调用“SystemExit”API或其他人终止该进程时,它将终止。当进程终止时,它将释放它所拥有的所有数据结构和资源。但是,它不会释放它在“进程”表中的插槽。相反,进程将向其父进程发送SIGCHLD信号。现在,由父进程释放“Process”表中的子进程槽。从子进程发出SIGCHLD信号到父进程释放“Process”表中的插槽,进程将处于僵尸状态。

如何杀死僵尸过程?

在僵尸进程ID上发出‘杀死-9’不会影响它,因为僵尸进程不存在。但是,可以通过向父进程发送SIGCHLD信号来杀死僵尸进程,方法是使用下面的杀死命令:

1 kill -s SIGCHLD parent-pid

此信号告诉父进程执行wait()系统调用和清理其僵尸进程。

注:有时,如果父进程没有被正确编程来处理SIGCHLD信号,那么上面的命令就不能工作了。你必须杀死僵尸进程的父进程。

如何找到过程状态

您可以从以下来源找到流程状态:

A.unix/linux命令行工具“top”将在“s”列中报告进程状态。进程状态用一个字符报告:

  • R-跑步/跑步
  • S-可中断睡眠
  • D-不间断睡眠
  • T-停止
  • -僵尸
    Unix/Linux中的进程状态是什么?

 

                                                                                         图 :顶部工具报告

 

您可以使用基于web的根源分析工具,如YCrash,它将报告流程状态。

福州小程序开发哪家强?

版权所有:https://www.eraycloud.com 转载请注明出处