当我尝试关闭 Gnome 终端中的选项卡时,它显示:
关闭此终端?此终端中仍有一个进程正在运行。关闭终端将会终止该进程。
我如何才能找出仍在运行的程序?请注意 的输出中没有任何内容jobs
。谢谢。
答案1
ps T
选择与终端相关的所有进程。
答案2
如果你在终端中启动了某个进程(例如 gedit),那么这两个进程的进程 ID (PID)(bash 的)和父进程 ID (PPID)(gedit 的)将相同。这可以在输出中看到
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 是否相同。
更多信息:
答案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
。