以下似乎适用于我的Ubuntu機器:
#!/bin/bash
setsid Rscript example.R > logfile.txt &
tail -f logfile.txt
以下是将SIGINT發送到wrapper.sh之前的一些相關過程:
5361 pts/10 00:00:00 bash
6994 ? 00:00:02 update-notifier
8519 pts/4 00:00:00 wrapper.sh
8520 ? 00:00:00 R
8521 pts/4 00:00:00 tail
在Ctrl C之後,您可以看到R仍然在運作,但是wrapper.sh和tail已被殺死:
5361 pts/10 00:00:00 bash
6994 ? 00:00:02 update-notifier
8520 ? 00:00:00 R
雖然附上你的Rscript […]指令&将它發送到背景,它仍然是同一個程序組的一部分,是以也接收SIGINT.
我不确定這是不是你的意圖,但是因為你正在調用tail -f,如果沒有用Ctrl c中斷,運作wrapper.sh的shell即使在R程序完成後也會繼續挂起.如果你想避免這種情況,以下應該可行,
#!/bin/bash
setsid Rscript example.R > logfile.txt &
tail --pid="$!" -f logfile.txt
“$!”是執行的最後一個背景程序的程序ID(Rscript […]調用).