[英]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 + c
, grunt 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.