Linux下如何仅筛选出状态为"R"的后台脚本进程?
只筛选状态为"R"的test.sh进程
嘿,我之前处理过类似的场景!当你用ps aux | grep test.sh的时候,很容易把之前终止但状态为"T"(停止状态)的旧进程也捞出来,想要只拿到正在运行(状态"R")的进程,其实有几种更精准的方式:
方法1:用awk直接过滤ps输出
你可以借助awk定位进程状态列(ps aux里第8列是STAT字段),同时匹配进程名并排除grep自身:
ps aux | awk '$8 == "R" && $0 ~ /test.sh/ && !/grep/'
$8 == "R":只保留状态为运行态的进程$0 ~ /test.sh/:确保进程和test.sh相关!/grep/:排除掉执行grep命令的自身进程
方法2:用ps内置选项精准定位进程
这种方法更高效,因为直接让ps只找命令名为test.sh的进程,不需要额外过滤grep:
ps -C test.sh --no-headers -o pid,stat,cmd | awk '$2 == "R"'
-C test.sh:告诉ps只查找命令名为test.sh的进程--no-headers:去掉表头输出,只留进程数据-o pid,stat,cmd:指定只输出进程ID、状态和命令行信息,精简输出- 最后用awk筛选状态为"R"的行
如果需要完整的ps aux格式输出,也可以调整成:
ps aux -C test.sh | awk '$8 == "R"'
这样既保留了aux的输出格式,又精准过滤了状态为R的test.sh进程。
内容的提问来源于stack exchange,提问作者prabhakaran
相关产品推荐
相关产品推荐

