获取后台gnome-terminal进程的pid

时间:2011-07-13 12:28:50

标签: bash background-process gnome-terminal

我可以轻松启动后台进程,找到它的pid并在正在运行的进程列表中进行搜索。

$gedit &
$PID=$!
$ps -e | grep $PID

这对我有用。但是,如果我启动gnome-terminal作为后台进程

$gnome-terminal &
$PID=$!
$ps -e | grep $PID

然后,在所有正在运行的进程列表中找不到它。

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:11)

如果你使用gnome-terminal的“--disable-factory”选项,你可以按照你想要的方式使用gnome-terminal。默认情况下,它会尝试使用已经处于活动状态的终端,因此这将允许您获取已启动的终端的pid。以下脚本打开一个窗口5秒钟,然后将其杀死:

#!/bin/bash
echo "opening a new terminal"
gnome-terminal --disable-factory &
pid=$!
echo "sleeping"
sleep 5;
echo "closing gnome-terminal"
kill -SIGHUP $pid

答案 1 :(得分:6)

这似乎是因为您启动的gnome-terminal进程本身启动进程然后退出。所以你捕获的PID是“存根”进程的pid,它启动然后分叉真正的终端。这样做可以完全脱离主叫终端。

不幸的是,我不知道有什么方法可以捕获“granchild”gnome-terminal进程的pid,这是剩下的一个进程。如果你做ps,你会看到gnome-terminal“孙子”进程在父pid为1的情况下运行。

答案 2 :(得分:1)

(这只是一个脚注)正如@Sodved所说,gnome-terminal启动一个进程本身然后退出,没有办法让孙子pid。 (另请参阅APUE第7章为什么子进程在其父进程终止时不会重新附加到祖父进程的原因。)

我发现gnome-terminal只实例化一次,所以这里只是一个用于特定任务的简短脚本:

GNOME_TERMINAL_PID=`pidof gnome-terminal`

如果你没有pidof:

GNOME_TERMINAL_PID=`grep Name: */status | grep gnome-terminal | cut -d/ -f1`