7

プログラムa.exeを実行し、タイミング統計をファイルtime.logに送信するfooというスクリプトがあります

#!/bin/bash
date 1>> time.log
(time ./a.exe) 2>> time.log

これは、スクリプトを端末のバックグラウンドで実行し、a.exe が終了するまでシェルを開いたままにしておくと機能しますが、スクリプトをバックグラウンドで実行して端末を終了すると (a.exe の実行には時間がかかります)。

foo & 
exit

戻ってみると、a.exe は実行されていますが、時間統計がログ ファイルに表示されません。これがなぜなのか誰か知っていますか?親シェルを閉じた後にタイミング統計を取得する方法はありますか?

ありがとう

4

5 に答える 5

7
nohup foo &

シェルを終了すると、すべての子プロセスに SIGHUP シグナルが送信され、デフォルトでそれらが強制終了されます。親シェルが終了してもプロセスを実行し続けたい場合は、SIGHUP を無視する必要があります。

名前

nohup -- ハングアップの影響を受けないコマンドを呼び出す

あらすじ

nohup utility [arg ...]

説明

nohupユーティリティは、引数を指定して command を呼び出し、この時点でシグナル SIGHUP を無視するように設定します。標準出力が端末の場合、標準出力は現在のディレクトリのファイル nohup.out に追加されます。標準エラーが端末の場合、標準出力と同じ場所に出力されます。

于 2010-11-28T18:08:53.087 に答える
2

質問にもタグが付けられbashているので、man bash

disown [-ar] [-h] [jobspec ...]
          Without  options,  each  jobspec  is  removed  from the table of
          active jobs.  If jobspec is not present, and neither -a  nor  -r
          is  supplied, the shell's notion of the current job is used.  If
          the -h option is given, each jobspec is not removed from the ta‐
          ble,  but is marked so that SIGHUP is not sent to the job if the
          shell receives a SIGHUP.  If no jobspec is present, and  neither
          the  -a  nor the -r option is supplied, the current job is used.
          If no jobspec is supplied, the -a option means to remove or mark
          all  jobs;  the  -r  option without a jobspec argument restricts
          operation to running jobs.  The return value is 0 unless a  job‐
          spec does not specify a valid job.

これは、ジョブを開始したときにプレフィックスを付けるのを忘れた場合に便利ですnohup。ただやる

disown -ah
disown -a
于 2010-11-28T18:27:33.980 に答える
0

親シェルを閉じると、a.exe が強制終了されます。

screen と入力して、通常どおりコマンドを実行し、画面を終了することができます。これにより、親シェルが終了したときにプロセスが強制終了されなくなります。この方法は少し面倒ですが、他の状況では便利な場合があります。

ジョンははるかに良い答えを出しました-nohupを使用してください。

于 2010-12-10T09:27:20.603 に答える
0

試す:

nohup <your_command> &
于 2010-11-28T18:08:54.953 に答える
0

tty/pts へのすべての参照を削除することを忘れないでください。0</dev/null は stdin 参照を削除します。

于 2010-11-28T18:09:10.070 に答える