否認コマンドを確認する


10

^z; bg; disown非常に重要な実行時間の長いプロセスを実行しているsshセッションを閉じるために、シーケンスを発行しました。このプロセスは、ステータス出力をstderrに書き込みます。デタッチされた後も書き込みを続けます(lsofで確認、stderr fdはr / wに対して開いています)。

プロセスが実際に否認されていることを確認する方法はありますか(シェルが1を受信した場合、SIGHUPを受信しません)?



2
好奇心旺盛ですが、なぜですか:$ PROCESS 1 >> / root / std.out 2 >> / root / err.out&
Avery Payne

回答:


12

Bashでは、disownコマンド自体が発行すると、バックグラウンドのプロセス(bgまたはを介して&)がアクティブなジョブテーブルから削除され、ログアウト時にSIGHUPを受信しないようにマークが付けられます。

のように、1つ以上のジョブを渡して、否認することもできdisown 1 3ます。このdisown -hフラグは、ジョブをテーブルに保持したいが、ログアウト時にSIGHUPを保持しない場合に役立ちます。

jobsコマンドを発行すると、ジョブテーブルを表示できます。背景が成功すると、が表示され[1]+ command &ます。ジョブの否認後は、ジョブテーブルに表示されなくなり、ログアウト時に強制終了されることもなくなります。あなたはまだを介してプロセスを表示することができps uxtopおよびその他のプロセス視聴ユーティリティ。

ジョブが否認された後、ジョブが自然に終了するまで待つかkill、PIDにシグナルを送信してジョブを停止できます。

Bashは終了する実行中のジョブのリストからジョブを削除するだけで、ターミナルのstdoutおよびstderrへのファイルハンドルがまだ開いているため、ターミナルデバイスが閉じられるまで(ログアウトしたとき)ジョブから出力を受信し続けます。

例:

# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533

# we see our command is still running
$ jobs
[1]+  Running                 cat /dev/urandom > test &

# we disown the backgrounded job
$ disown 1

# notice it is no longer in the job table
$ jobs

私は通常disownrsyncまたはcpなどの長時間実行される可能性のあるコマンドを実行し、その後、終了せずにログアウトする必要があると判断した場合にのみ使用します。コマンドを実行してログアウトすることがわかっている場合はtee、ファイルにパイプまたはpingするか、で実行するnohupか、実行することで出力をキャプチャscreenできます(これにより、コマンドの所有権を再取得したり、後で終了したりできます) )。

例:

# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log

# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log

# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null

1
+1有益で例があります。いいね!
アンディ・スミス

非常に有益なコメント。プロセスのデタッチを検証できない(ジョブテーブルに存在しないことに注意する以外に)と言っていませんか?
mikewaters、2011

1
detachバックグラウンドジョブで実行すると、ジョブは切り離されます:)バックグラウンドプロセスで実行しても何も起こらない中間点はありません。チェックjobsは、停止したプロセスなどを切り離そうとしていないことを確認するだけです。
lunixbochs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.