Linux
如何僅獲取所有正在執行的程序 ID?
我知道
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 $$+ 表示一位或多位數字。但我不會為這個特定任務推薦正則表達式,明白為什麼嗎?:-)