从开始的.bashrc后台进程(Start background process from .bas

2019-06-25 12:54发布

我意识到这可能是一个愚蠢的问题,但我解决不了的,即使挖计算器网站并彻底谷歌小时。

这里是.bashrc中开始的gkrellm基本代码,一旦我登录到壳

if ps ax | grep -v grep | grep gkrellm > /dev/null
then
    echo "gkrellm is already running"
else
    command gkrellm &
fi

我已经习惯了尝试

...
else
    nohup gkrellm &
fi
...

...
else
    gkrellm
    $GK_PID=`pidof gkrellm`
    disown -h $GK_PID
fi
...

的gkrellm正确把作为背景的工作,我可以使用shell(如预期)。 但我仍然有离开的gkrellm一次我按下Ctrl-C,即使我开始从同一外壳的其他应用程序。 如何防止从的gkrellm收盘按Ctrl-C按?

以防万一。 我使用所谓的KITTY腻子克隆,但认为这不是它的问题。

感谢帮助!

Answer 1:

使用bash( disown&>/dev/null
你需要在BG运行应用程序( gkrellm &然后disown

if ps -C gkrellm -o user | grep "$LOGNAME" &>/dev/null 
then echo "gkrellm is already running"
else gkrellm & disown
fi

如果你想更便携和使用POSIX SH
你将需要使用nohup (部分coreutils和POSIX)
并且还背景它( nohup cmd &
你也想使用.profile ,而不是.bashrc

if ps -C gkrellm -o user | grep "$LOGNAME" 2>/dev/null 1>&2
then echo "gkrellm is already running"
else nohup gkrellm &
fi

其他方法将包括-为@Pontus回答-使用工具如dtachscreentmux在命令在分离的环境中执行。

由庞
它会更有意义,用你的窗口管理器的自动启动功能

的确:)作为AFAIK gkrellm是一个GUI应用程序,最好是自动启动它,或者使用.xinitrc (如果你的登录管理器支持的话),或者你的窗口管理器的自动启动设施。



Answer 2:

尝试更换“的nohup的gkrellm和”与此:

screen -S gkrellm -d -U -m gkrellm

这将启动一个分离屏幕会话中运行的gkrellm,也不会在意当前shell会话。 我不知道,如果从开始的.bashrc这是最好的解决方案,虽然,这将使使用您的窗口管理器的自动启动功能更有意义。

编辑:不知道如果我正确读取的问题,您使用的KITTY连接到Linux主机,并通过X转发gkrell远程运行? 如果是这样的话,你显然不能使用窗口管理器的功能。 :)



Answer 3:

差点忘了这个问题,并回答我的问题找到了有效的解决方案后,不久前;)按照多年的伟大工程,在我的.bashrc

mygkrellm()
{
    if pidof -x "gkrellm" >/dev/null; then
    echo "Gkrellm is already running. Go to shell!"       
    else
    nohup "/usr/bin/gkrellm" &
    fi
}


文章来源: Start background process from .bashrc
标签: bash putty