按Ctrl + C终止“grunt watch”,但杀死从同一个bash开始的Atom编辑器,为什么?

时间:2015-05-31 09:05:10

标签: linux bash shell atom-editor

我有一个名为wsjs.sh的脚本:

#!/bin/bash
WS=/home/user/wsjs
cd $WS
nohup atom . & 
gnome-terminal
grunt watch

如果我在bash中运行它:

./wsjs.sh

然后原子编辑器,gnome-terminal分别启动,当前的bash显示:

user@ubuntu:~$ ./wsjs.pwd 
nohup: appending output to ‘nohup.out’
Running "watch" task
Waiting...

现在如果按ctrl + cgrunt watch退出,原子编辑器也会关闭。

......这很奇怪。

我手动输入bash中的每个命令,并且原子未关闭。 我用gedit替换了atom并运行脚本,它没有关闭。

为什么原子关闭了?谢谢!

2 个答案:

答案 0 :(得分:3)

这导致因为在执行shell脚本时,它有一个进程id,并且执行文件内的命令将具有脚本文件的父进程id。 因此,在终止或Ctl + C脚本文件时,它也会终止子进程(在您的情况下

cd $WS
nohup atom . & 
gnome-terminal
grunt watch

) 执行单个命令时有独立的进程ID。

希望你明白了。

答案 1 :(得分:2)

我认为您希望运行脚本的行为与在交互式shell中运行其中的命令完全相同。

如果这确实是你的意图,那么就不要运行

./wsjs.pwd

...在自己的shell中运行脚本;相反,运行

source wsjs.pwd

...或其POSIX兼容的等价物,

. wsjs.pwd ## the space is not a typo!

...在您预先存在的shell中运行脚本。