使用ps查看前台进程

使用ps查看前台进程

我可以使用ps看到后台进程。但是有没有办法查看前台进程呢?例如,

$nohup process1 &

然后

ps -ef | grep“进程1”

将显示正在执行的进程“process1”。但上面的命令不会显示执行的前台进程,例如,

$进程2

答案1

您可能会感到困惑,因为ps默认情况下会显示调用所在终端上的进程ps,例如从同一终端窗口启动的进程。

ps -u $LOGNAME如果您知道终端名称,请尝试或ps -t $THETTYNAME1,$THETTYNAME2。 (终端名称通常看起来像“ttyN”或“pts/N”)。

答案2

奇怪的是,ps 命令允许您监视所有活动进程的状态,包括前台和后台。

例如,我在第一个 shell 中启动以下进程:

$ startNetworkServer 
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.3.2.1 - (599110) started and ready to accept connections on port 1527 at 2010-06-18 14:14:33.277 GMT 

在另一个外壳中:

$ ps aux  | grep NetworkServer | grep -v grep
pascal    5928  0.3  1.4 661492 29216 pts/0    Sl+  16:14   0:03 /usr/lib/jvm/java-6-sun/bin/java -classpath /usr/share/javadb/lib/derby.jar:/usr/share/javadb/lib/derbynet.jar:/usr/share/javadb/lib/derbytools.jar:/usr/share/javadb/lib/derbyclient.jar org.apache.derby.drda.NetworkServerControl start

该进程按预期列出(并且+显示它位于前台进程组中)。

答案3

问题:

“有办法查看前台进程吗?”然后问题继续声称ps -ef不显示在前台运行的进程。

回答:

是的, 有一种方法。还:ps -ef 显示在前台运行的进程 -但它没有显示状态过程的。这在文档 ( man ps) 中进行了解释,并且可以通过简单的实验进行验证。考虑这个例子:

在一个终端中,运行:

ping 8.8.8.8 > /dev/null

在另一个终端中:

ps -ef | grep ping | grep -v grep
seamus        1161   974  0 23:20 pts/1    00:00:00 ping 8.8.8.8

注意ps -ef不提供状态其输出中的信息。然而,man ps解释说状态信息可用-o与关键字一起使用时的参数stat

ps -eo pid,stat,command | grep ping | grep -v grep
 1161 S+   ping 8.8.8.8

这告诉我们:

  • 进程PID是1161通过关键字pid
  • 过程状态S+通过关键字stat
  • 关键字command显示ping 8.8.8.8产生了该过程

状态的值S+解码的man ps的标题下PROCESS STATE CODE。这告诉我们:

S 可中断睡眠(等待事件完成)
+ 处于前台进程组

量子电动力学

我们已经看到ps -ef列出了 PID 为 的进程1161,并且ps -eo pid,stat,command揭示了状态PID1161前景过程。


注 1: 关键词标题下-o描述了该论点。这里解释了关键字产生两个字符的过程man psSTANDARD FORMAT SPECIFIERSstat状态,而关键字state仅产生一个字符状态

笔记2:这适用于我的基于 Debian 的系统(报告为版本ps from procps-ng 3.3.15)和 macOS 10.15(源自 BSD 版本ps)。

相关内容