スクリプトを終了するときにSIGINTがプロセスに渡されないように、bashスクリプトからプロセスを分離しようとしています。
disown
端末で直接コマンドを使用しましたが、bashではdisown
SIGINTが渡されるのを防ぎませんでした。このスクリプトの目的は、単一の呼び出しでopenocdを起動し、gdbを起動することです。スクリプトが終了しないため(gdbを実行しているため)、SIGINTはまだgdbからopenocdに渡されます。これは、SIGINTがgdbで一時停止コマンドとして使用されるために問題になります。
端末では次のようになります。
$ openocd & # run openocd demonized
$ disown $! # disown last pid
$ gdb # invoke GDB
この順序で端末から呼び出されると、SIGINTはgdbからopenocdに渡されません。ただし、同じ呼び出しがbashスクリプトにある場合、SIGINTが渡されます。
どんな助けでも大変感謝します。
ps この問題は OS X で発生しますが、すべての Unix ツールにも移植可能なツールを使用しようとしています。
ベストアンサー1
Bashスクリプトからプロセスを分離するには、次の手順に従ってください。
nohup ./process &
たとえば、(ctrl + c)を使用してbashスクリプトを停止したり、SIGINT
シェルが終了した場合、SIGHUP
プロセスは中断されずに正常に実行され続けます。stdout
&はstderr
ログファイルにリダイレクトされますnohup.out
。
スタンドアロンコマンドの実行中に端末から出力を表示するには、次のようにしますtail
。
TEMP_LOG_FILE=tmp.log
> "$TEMP_LOG_FILE"
nohup ./process &> "$TEMP_LOG_FILE" & tail -f "$TEMP_LOG_FILE" &