首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取后台gnome终端进程的pid

获取后台gnome终端进程的pid
EN

Stack Overflow用户
提问于 2011-07-13 20:28:50
回答 3查看 6.1K关注 0票数 7

我可以很容易地启动一个后台进程,找到它的pid并在运行的进程列表中搜索它。

代码语言:javascript
运行
复制
$gedit &
$PID=$!
$ps -e | grep $PID

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

代码语言:javascript
运行
复制
$gnome-terminal &
$PID=$!
$ps -e | grep $PID

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

我是不是漏掉了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-13 20:39:52

这似乎是因为您启动的gnome终端进程启动了一个进程本身,然后退出。因此,您捕获的PID是"stub“进程的pid,它会启动并派生实际的终端。它这样做,所以它可以完全从主叫终端分离。

不幸的是,我不知道有什么方法可以捕获“gnome”gnome终端进程的pid,这个进程还在运行。如果执行ps,您将看到gnome-terminal“孙”进程在父pid为1的情况下运行。

票数 6
EN

Stack Overflow用户

发布于 2011-07-28 23:05:04

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

代码语言:javascript
运行
复制
#!/bin/bash
echo "opening a new terminal"
gnome-terminal --disable-factory &
pid=$!
echo "sleeping"
sleep 5;
echo "closing gnome-terminal"
kill -SIGHUP $pid
票数 13
EN

Stack Overflow用户

发布于 2011-07-13 21:22:24

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

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

代码语言:javascript
运行
复制
GNOME_TERMINAL_PID=`pidof gnome-terminal`

如果你没有pidof:

代码语言:javascript
运行
复制
GNOME_TERMINAL_PID=`grep Name: */status | grep gnome-terminal | cut -d/ -f1`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6678865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档