仅列出处于挂起模式的进程

仅列出处于挂起模式的进程

要列出在后台运行的进程,可以输入: ps -efps -aux

但是如何列出已暂停的进程,假设我在前台有一些进程并且刚刚暂停(使用bg <jobid>Ctrl+z

我如何知道处于该状态(暂停)的进程有哪些?

谢谢

答案1

的输出ps包括状态:

$ ps aux | head -n2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 200892  5132 ?        Ss   Mar04   0:20 /sbin/init

STAT列表示流程的状态。可以是以下之一(来自man ps):

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

因此,您正在寻找状态显示为 的进程T。要仅查看这些进程,您可以解析ps它们的输出:

ps aux | awk '$8=="T"'

有时,可以向状态字段添加其他字符(取决于您使用的选项),因此这可能是一种更安全的方法:

ps aux | awk '$8~/T/'

答案2

您可以使用 bashjobs内置命令查看后台或暂停的作业的状态,例如

  • Ctrl启动并后台运行一个进程;使用+启动并暂停第二个进程Z

    $ sleep 100 & sleep 200
    [1] 12444
    ^Z
    [2]+  Stopped                 sleep 200
    
  • 检查所有作业的状态

    $ jobs
    [1]-  Running                 sleep 100 &
    [2]+  Stopped                 sleep 200
    
  • 仅检查已暂停作业的状态

    $ jobs -s
    [2]+  Stopped                 sleep 200
    

请参阅JOB CONTROL部分man bash或 shell 的在线帮助help jobs

相关内容