Ctrl + C 终止 "grunt watch",但杀死从相同 bash 启动的 Atom 编辑器,为什么?

Ctrl + C to terminate "grunt watch", but kills Atom editor which started from the same bash, why?

我将此脚本命名为 wsjs.sh:

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

如果我 运行 它在 bash:

./wsjs.sh

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

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

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

...这很奇怪。

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

为什么 atom 被关闭了?谢谢!

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

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

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

希望你明白了。

我了解到您希望 运行在交互式 shell.

中 运行ning 脚本的行为方式与 运行ning 脚本中的命令完全相同

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

./wsjs.pwd

...其中 运行 是它自己的脚本 shell;相反,运行

source wsjs.pwd

...或其 POSIX 兼容的等效项,

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

...其中 运行 是您先前存在的 shell 中的脚本。