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

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

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

关闭此终端?此终端中仍有一个进程正在运行。关闭终端将会终止该进程。

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

答案1

ps T

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

答案2

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

ps -ef

命令。为了使其更具可读性,我们首先将输出“管道”到 以grep查找当前正在运行的所有“bash”进程的 PID,然后再次将其“管道”到awkawk仅选择 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

人 awk

答案3

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

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

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

答案4

您可以使用htop。在 Ubuntu 16.04(及更高版本)中,只需键入即可安装它sudo apt-get install htop

您也可以使用top

相关内容