2016-07-14 16 views
0

サーバ上のsshセッションで、私はいくつかのbashプロセス(他のプロセスを起動する)を&でバックグラウンドで開始し、stdin/stdoutをファイル(<dev/null >mylog.out)にリダイレクトしました。シェル - バックグラウンドで実行しSTDIN/OUTをリダイレクトすることでプロセスを切り離しましたか?

プロセスはjobsの下に記載されていないとps -Tは一bash工程とps自体を示します。

ほとんどの(子プロセス)プロセスはユーザーrootによって実行されますが、すべて特定のTTY pts/20にリンクされています。

sshセッションを閉じると、プロセスとその子プロセスにHUPシグナルが送信されるのですか、それともそれらは継続して実行されますか?はいの場合、どうすれば完全に切り離すことができますか?

+0

「nohup」を使用していますか?しかし、nohupがnohup.outファイルの出力をリダイレクトするので、注意してください。 – Pawamoy

+0

screenコマンドを使用することもできます。 –

+0

私はどのPIDをnohupにするのか分かりません。 'ps'は2つのプロセスだけを表示し、他のプロセスはrootとして実行しています... –

答えて

1

プロセスをバックグラウンドに置くと、プロセスはSIGHUPコマンドを無視します。そのプロセスは引き続き実行されます。

テスト結果:

ログインして実行bashスクリプトo.shを背景と出口に:バックシステムに

system:10.11.2.122 > o.sh & 
system:10.11.2.122 > exit 

ログインとo.shプロセスをチェックしてください。

system:10.11.2.122 > ps -ef | grep o.sh 
root  19115  1 0 10:10 ?  00:00:00 /usr/local/bin/bash /root/scripts/o.sh 
root  27774 20197 0 10:23 pts/2 00:00:00 grep o.sh 

このメソッドは、実行中のdaemonisesプロセス。

bashの場合、この現象はhuponexitシェルオプションによって異なります。これらおよびその他のオプション設定は、CentOS/RedHat 6.7のshoptコマンドを使用して確認できます。

huponexitは、CentOS/RedHat 6.7ではデフォルトでオフになっているようです。

shoptの出力のサブセット:

histappend  off 
histreedit  off 
histverify  off 
hostcomplete on 
huponexit  off 
interactive_comments on 
lithist   off 
login_shell  on 
mailwarn  off 
no_empty_cmd_completion off 
nocaseglob  off 
nocasematch  off 
nullglob  off 

だからあなたの質問に答えるために:私は、SSHセッションを閉じると

、プロセスとその子供がHUPシグナルや意志が送信されます彼らは走り続けますか?

あなたのhuponexitの設定によって異なります。 huponexitoffの場合、であり、プロセスは実行を継続します。そうでない場合、はい

はいの場合、どうすれば完全に切り離すことができますか?

処理を実行するときにnohupコマンドを使用します。

nohup your_process & 
関連する問題