当运行带有多个nohup命令的脚本时,进程正在停止

问题描述 投票:0回答:1

我已经创建了一个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

linux bash q kdb nohup
1个回答
0
投票

这里的问题是试图从终端读取的后台进程(在本例中为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不会帮您完成。

© www.soinside.com 2019 - 2024. All rights reserved.