如何在终端中查找仍在运行的进程?


12

当我尝试关闭Gnome Terminal中的选项卡时,它说:

关闭此终端?该终端中仍在运行一个进程。关闭终端会杀死它。

我如何找出仍在运行的内容?请注意,的输出中没有任何内容jobs。谢谢。


1
如果在显示此消息时出现在shell提示符下,则可能是嵌套的shell(而不是由终端仿真器直接启动的shell)。也许你已经开始了screentmuxscriptsshmc,打开了面板关闭,或只是一个由例如打字壳bash,或沿着这些路线的东西。按Ctrl + D或键入exit退出外壳程序,您将看到最终的位置。
egmont

谢谢。之后exit,gnome终端选项卡不会关闭。
蒂姆(Tim)

1
一秒钟exit可能会关闭它。@egmont您可以将其移至答案吗?
Videonauth

Answers:


12
ps T

选择与终端关联的所有进程。


很好,虽然可能有点欺骗。通过nohup命令生成的进程与终端断开连接,因此请勿阻止其关闭。但是它们仍在此命令中列出。
Sergiy Kolodyazhnyy

或者只是ps
user10089632

1

您可以在将Shell的PID列为父进程的进程中发挥最大作用。如您所知,我们可以指定ps格式

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

在这里,我们从特殊变量中获取外壳的PID $$到中SHELLPID,然后awk可以在管道的子外壳中使用它。本质上,我们只是以NAME,PID,Parent PID形式列出进程,并仅在最后一列中过滤出具有适当PID的进程。


1

如果您在终端(例如gedit)中启动了某个进程,则这两个进程的(bash的)进程ID(PID)和(gedit的)父进程ID(PPID)将是相同的。这可以在输出中看到

ps -ef

命令。为了使其更具可读性,首先让输出“管道” grep以查找当前正在运行的所有“ bash”进程的PID,然后再将其“管道”至awk。在awk仅选择PID和进程名的字段(字段2和8),并将其输出到屏幕上。

ps -ef | grep bash | awk '{print $2 ": " $8}'

输出中的数字为PID。您将使用它来查找具有该PID的终端中启动的进程。请注意,如果您打开了多个端子,则可能会有多于一行的输出。现在,找到该终端会话的“子”进程(如果有),我们可以使用以下命令:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

您必须在最后一条命令中输入PID编号代替EnterPID。如果“ bash”有多个PID,则必须全部尝试。

最后一条命令只是查找输出,ps -ef并搜索PID(从上一条命令中找到的)和PPID是否与任何进程相同。

更多信息:

人ps

老兄


-1

您可以使用htop。在Ubuntu 16.04(及更高版本)中,您可以通过键入进行安装sudo apt-get install htop

您也可以使用top


以及您如何使用来识别当前终端中的进程htop
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.