我可以很容易地启动一个后台进程,找到它的pid并在运行的进程列表中搜索它。
$gedit &
$PID=$!
$ps -e | grep $PID
这对我很有效。但是如果我启动gnome-terminal作为后台进程
$gnome-terminal &
$PID=$!
$ps -e | grep $PID
则在所有正在运行的进程的列表中找不到它。
我是不是漏掉了什么?
发布于 2011-07-13 20:39:52
这似乎是因为您启动的gnome终端进程启动了一个进程本身,然后退出。因此,您捕获的PID是"stub“进程的pid,它会启动并派生实际的终端。它这样做,所以它可以完全从主叫终端分离。
不幸的是,我不知道有什么方法可以捕获“gnome”gnome终端进程的pid,这个进程还在运行。如果执行ps,您将看到gnome-terminal“孙”进程在父pid为1的情况下运行。
发布于 2011-07-28 23:05:04
如果您对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
发布于 2011-07-13 21:22:24
(这只是一个脚注)正如@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`
https://stackoverflow.com/questions/6678865
复制相似问题