db4*_*b42 7 bash background-process gnome-terminal
我可以轻松地启动后台进程,找到它的pid并在正在运行的进程列表中搜索它.
$gedit &
$PID=$!
$ps -e | grep $PID
Run Code Online (Sandbox Code Playgroud)
这适合我.但是,如果我启动gnome-terminal作为后台进程
$gnome-terminal &
$PID=$!
$ps -e | grep $PID
Run Code Online (Sandbox Code Playgroud)
然后,在所有正在运行的进程的列表中找不到它.
我在这里错过了什么吗?
Osm*_*und 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
Run Code Online (Sandbox Code Playgroud)
这似乎是因为您启动的gnome-terminal进程本身启动一个进程然后退出.所以你捕获的PID是"存根"进程的pid,它启动然后分叉真正的终端.它这样做可以完全脱离主叫终端.
不幸的是,我不知道有什么方法可以捕获"granchild"gnome-terminal进程的pid,这是剩下的一个进程.如果您执行ps,您将看到运行父pid为1的gnome-terminal"孙子"进程.