linux 上的进程状态

Status of process on linux

我在下面的数组中有一个 pid 的列表

All_Process_Pid

对于每个进程,我想通过其 pid 检查进程的状态。

更确切地说,对于每个pid,我想知道它对应的过程是不是-

  1. 运行

  2. 完成

  3. 已停止

如何在 bash 中执行此操作?

首先,进程状态比"Running"、"Done"和"Stopped"多,来自man ps :

PROCESS STATE CODES
    Here are the different values that the s, stat and state output 
    specifiers (header "STAT" or "S") will display to describe the
    state of a process:

       D    uninterruptible sleep (usually IO)
       R    running or runnable (on run queue)
       S    interruptible sleep (waiting for an event to complete)
       T    stopped by job control signal
       t    stopped by debugger during the tracing
       W    paging (not valid since the 2.6.xx kernel)
       X    dead (should never be seen)
       Z    defunct ("zombie") process, terminated but not reaped by its parent

您可以使用命令 ps:

通过其 pid(进程 ID)获取一个进程的状态
ps -q <pid> -o state --no-headers

来自 人 ps:

-q pidlist
     Select by PID (quick mode).  This selects the processes whose
     process ID numbers appear in pidlist.  With this option ps reads the
     necessary info only for the pids listed in the pidlist and doesn't
     apply additional filtering rules. The order of pids is unsorted and
     preserved. No additional selection options, sorting and forest type
     listings are allowed in this mode.  Identical to q and --quick-pid.

如果您的 bash 脚本中有 pid "All_Process_Pid" 数组,那么您可以:

for i in "${All_Process_Pid[@]}"
do
     echo "process $i has the state $(ps -q $i -o state --no-headers)"
done