Linux

如何僅獲取所有正在執行的程序 ID?

  • February 22, 2019

我知道

ps ax

返回 pid

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

我只需要清理這些字元串,但我無法使用 sed 來完成,因為我無法編寫正確的正則表達式。你可以幫幫我嗎?

使用 ps 輸出格式:

ps -A -o pid

命令的輸出格式是最好的選擇。o 選項控制輸出格式。我在下面列出了一些參數,其餘的請參見“man ps”(使用多個參數-o pid,cmd,flags)。

KEY   LONG         DESCRIPTION
  c     cmd          simple name of executable
  C     pcpu         cpu utilization
  f     flags        flags as in long format F field
  g     pgrp         process group ID
  G     tpgid        controlling tty process group ID
  j     cutime       cumulative user time
  J     cstime       cumulative system time
  k     utime        user time
  o     session      session ID
  p     pid          process ID

awk 或 cut 會更好地獲取列:

通常,您不希望使用正則表達式來選擇第一列,您希望通過管道將其剪切或 awk 以剪切出第一列,例如:

ps ax | awk '{print $1}'

正則表達式是一個選項,如果不是最好的:

如果你要使用正則表達式,它可能是這樣的:

ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'

$1 僅列印括號中匹配的內容。^ 將 錨定到行首。空格星號表示允許在數字前使用可選的空格字元。

$$ 0-9 $$+ 表示一位或多位數字。但我不會為這個特定任務推薦正則表達式,明白為什麼嗎?:-)

引用自:https://serverfault.com/questions/53360