2012-03-17 10 views
2

私はIRCを一週間検索し、グーグルで座っているし、Linuxに敬意を表する友人と話したこともあるが、まだ確かな答えは得られていない。root以外のユーザーのsshを終了しても、自分のLinuxプログラムを実行し続けることはできますか?

root以外のユーザーにログインし、基本的に "./myprogram &"を引用符なしで実行するとすぐに実行されるシェルスクリプトを作成しました。 shhを終了するとプログラムがタイムアウトし、ログインするまで接続できません。root以外のユーザーのSSHを終了した後、プログラムを実行し続けるにはどうすればいいですか?

これをプログラムレベルで実行する必要があるのか​​、それとも何か不思議ですか?これがここに属していないならば、私は謝ります。どこが正直であるのかは分かりません。

答えて

3

はnohupを試してみてください:あなたはあなたのsshセッションを終了するときにhttp://linux.die.net/man/1/nohup

は、そう、あなたのプログラムがSIGHUP信号を受け取ります。

2

sshセッションの終了後にプログラムが終了する可能性のある2つの信号があります:SIGHUPSIGPIPEです。

SIGHUP親プロセス(ssh)が終了したため、プログラムに送信されます。あなたは、どちらかのプログラムnohupを(すなわちnohup ./myprogram &)を使用して、または組み込みシェルdisown./myprogram& disown)それはsshセッションが持っている後stdoutまたはstderrへの書き込みをしようとした場合

SIGPIPEは、あなたのプログラムに送信されますを使用することによってこの問題を回避することができます切断されました。これを回避するには、nohupを使用して横に、すなわちnohup ./myprogram >/dev/null 2>/dev/null &

7

、ファイルまたは/dev/nullにリダイレクト、あなたはscreenまたはtmuxなどのターミナルマルチプレクサでプログラムを実行することができます。それらを使用すると、セッションに再接続することができます。たとえば、ターミナルベースの対話型プログラムを実行する必要がある場合や、不安定なssh接続で長時間実行されるスクリプトを実行する必要がある場合に便利です。

boybuは、screenの機能拡張です。

+0

+1インタラクティブなプロセスを考慮します。また、最初に私は 'boybu'を聞いたことがある...面白いと思う – je4d

0

はまた、他の回答(nohupscreen、...)に加えて、batch(またはat)コマンドを使用する場合があります。 sshには-fオプションがあります。

関連する問題