我已经创建了一个bash脚本来运行多个nohup命令来启动进程,但是,当运行第二个nohup命令时,第一个进程将停止,依此类推。我该如何解决?
tp() { echo "Starting Tickerplant" ; nohup ~/q/m32/q $HomeDir"tick.q" -p $TP &> $Logs"tick.log" & }
rdb() { echo "Starting Real-Time Database" ; nohup ~/q/m32/q $FP"r.q" $TP $HDB -p $RDB &> $Logs"rdb.log" & }
fh() { echo "Starting Feedhandler" ; nohup ~/q/m32/q $FP"simpleFeed.q" &> $Logs"feed.log" & }
cep() { echo "Starting Critical Event Processer" ; nohup ~/q/m32/q $FP"cep.q" &> $Logs"cep.log" & }
以下结果
Starting Tickerplant
[5]+ Stopped nohup ~/q/m32/q $HomeDir"tick.q" -p $TP >&$Logs"tick.log"
Starting Real-Time Database
[6] Exit 1 nohup ~/q/m32/q $FP"r.q" $TP $HDB -p $RDB >&$Logs"rdb.log"
Starting Critical Event Processer
Starting Feedhandler
FINISHED
这里的问题是试图从终端读取的后台进程(在本例中为kdb)。缺省情况下,只有前台进程可以访问终端。如果后台进程尝试执行此操作,它将被挂起。这就是为什么您看到
[5]+ Stopped nohup ~/q/m32/q $HomeDir"tick.q" -p $TP
按下键的那一刻。您需要重定向STDIN以避免这种情况:
nohup q -p ... < /dev/null &> /path/to/log
由于您不执行此操作,因此在启动RDB时它无法连接到TP(已挂起!)并退出。这就是为什么您看到
[6] Exit 1 nohup ~/q/m32/q $FP"r.q" $TP $HDB -p $RDB
因此,请确保您分离标准输入,因为与GNU / Linux堂兄相比,macOS上的nohup
不会帮您完成。