在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-停止
- Z -僵尸
您可以使用基于web的根源分析工具,如YCrash,它将报告流程状态。
福州小程序开发哪家强?