簡體   English   中英

按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

然后原子編輯器,gnome-terminal分別啟動,當前的bash顯示:

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

現在,如果按ctrl + cgrunt watch退出,BUT原子編輯器也會關閉。

......這很奇怪。

我在bash中手動輸入了每個命令,並且原子未關閉。 我用gedit替換了atom並運行腳本,它沒有關閉。

為什么原子關閉了? 謝謝!

這導致因為在執行shell腳本時,它具有進程ID,並且執行文件內的命令將具有腳本文件的父進程ID。 因此,在終止或Ctl + C腳本文件時,它也會終止子進程(在您的情況下

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

)執行單個命令時有獨立的進程ID。

希望你明白了。

我收集到您希望運行腳本的行為與在交互式shell中運行其中的命令完全相同。

如果這確實是你的意圖,那么就不要跑了

./wsjs.pwd

...在自己的shell中運行腳本; 相反,跑

source wsjs.pwd

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

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

...在您預先存在的shell中運行腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM