2017-04-05 16 views
0

Cygwinで何か変わったことが起こっています。 いくつかのプロセスをバックグラウンドに置くスクリプトを実行します。しかし、スクリプトが終了するとすぐに、彼らはすべて死ぬ。スクリプトから呼び出されたバックグラウンドプロセスが終了した後に終了する

単純な例では、このスクリプトを取る:

tail -f logfile.log & 

私は尾の作品(それが最後のXラインを出力します)が、プロセスはもう、すぐにスクリプトが終了としてバックグラウンドではないことがわかります。

Linuxでは、それは何らかの理由で動作しますか?

+0

cygwinのインストールでこれを再現しようとしましたが、報告する内容が表示されません。スクリプトが終了すると、tailはまだ実行されています。 – ewindes

答えて

1

私はLinux上でnohup *cmd* &を試してみます。しかし、子に渡されるファイル記述子を考慮する必要があります。だからnohup *cmd* </dev/null >/dev/null 2>&1 &しかし、tail -fの出力はどこに行きますか?シェルを終了するとウィンドウが閉じますか?出力を見たい場合はシェルを終了できません。

+0

cygwinのウィンドウは開いたままになっているので、ログがテールされている間は見ることができます。シェルのスクリプトからではなく、シェルから直接コマンドを実行すると、すべてが機能します。しかし、私はそれらをスクリプトに入れて、それが走った後、それは終了するでしょう。 –

+1

スクリプトの内容を実行するには2通りの方法があります。スクリプトのソースを指定することも、スクリプトを実行することもできます。スクリプトをソースするときは、現在のシェルによって処理されるため、コマンドはスクリプトに直接入力するときと同じように動作します。 'を使います。 Scrpt'これを行うには。スクリプトを実行すると、現在のシェルは新しいシェルを開始し、スクリプト内のコマンドを処理します。これを行うには、 'bash Scpt'または'。/ Scpt'を使います。このサブシェルは、子プロセスが終了すると子プロセスを終了します。つまり、子プロセスが親によって殺されるのを防ぐことができない限り、子プロセスが終了するまで待機します。 –

+0

Doug、その問題を解決しました、大きな説明に感謝します。私は代わりに./Scrptを使っていました。 Scrptそれは問題だった。あなたに+1してください。 –

関連する問題