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

Tim*_*Tim 15 gnome-terminal process job-control

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

关闭这个终端?该终端中仍有一个进程在运行。关闭终端将杀死它。

我怎样才能找出什么仍在运行?请注意, 的输出中没有任何内容jobs。谢谢。

小智 14

ps T
Run Code Online (Sandbox Code Playgroud)

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


Non*_*del 3

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

ps -ef
Run Code Online (Sandbox Code Playgroud)

命令。为了使其更具可读性,让我们首先将输出“管道”到grep查找当前正在运行的所有“bash”进程的 PID,然后再次将其“管道”到awk. 仅选择awkPID 和进程名称字段(字段 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 对于任何进程是否相同。

更多信息:

男人附言

人 awk


Ser*_*nyy 2

您可以查看将您的 shell 的 PID 列为父进程的进程的峰值。您可能知道也可能不知道,我们可以指定ps格式

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   
Run Code Online (Sandbox Code Playgroud)

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