ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- ハングアップおよび停止の影響を受けないコマンドの実行
/usr/bin/nohup command [argument]...
/usr/bin/nohup -p [-Fa] pid [pid]...
/usr/bin/nohup -g [-Fa] gpid [gpid]...
/usr/xpg4/bin/nohup command [argument]...
nohup ユーティリティーは、command で示すコマンドを、指定された引数とともに呼び出します。command が呼び出されたとき、nohup は、そのプロセスが SIGHUP シグナルを無視するように設定します。
-p または -g フラグを指定して実行すると、nohup は、プロセス ID またはグループ ID のリストで指定された実行中のプロセスが、ハングアップおよび停止の影響を受けないように設定します。
指定したコマンドが実行に時間を要する場合、ユーザーがコマンド終了前にログアウトする場合は、nohup ユーティリティーを使うと便利です。シェルが 終了するときに、システムはその子プロセスに SIGHUP シグナルを送信します。それにより、デフォルト では子プロセスが終了します。停止、実行中、バックグラウンドにあるすべてのジョブは、その呼び出しが nohup コマンドによるものだった場合、もしくはプロセスがプログラム上 SIGHUP を無視するように選択されていた場合、SIGHUP を無視して続行します。
特定のコマンドの実行に長い時間がかかることがわかっているときに、ユーザーが端末からログアウトしたい場合は、nohup ユーティリティーを使用できます。シェルが終了するとき、システムはその子プロセスに SIGHUP シグナルを送信します。デフォルトでは、そのシグナルによって子プロセスが強制終了されます。停止しているジョブ、実行中のジョブ、およびバックグラウンドジョブはすべて、自身の呼び出しの前に nohup コマンドが実行された場合、またはプロセスがプログラム上 SIGHUP を無視することを選択していた場合、SIGHUP を無視して実行し続けます。
nohup ユーティリティーは、プロセスが SIGHUP を無視するようにしますが、これらのプロセスをほかのシグナルから保護するわけではありません。最近のシェルはログアウト時に SIGHUP 以外のシグナルを送信する場合があるため、制御しているシェルが終了したときに、/usr/bin/nohup の下で実行されているジョブが強制終了されることがありえます。
/usr/bin/nohup によって実行されるプロセスは、SIGHUP (ハングアップ) および SIGQUIT (中止) シグナルを受け付けません。
ID に指定されたプロセスは、SIGHUP (ハングアップ) および SIGQUIT (中止) シグナルを受け付けません。また、制御端末への出力は、すべて nohup.out ファイルにリダイレクトされます。-F を指定すると、nohup は、各プロセスに制御を強制します。-a を指定すると、プロセスが SIGHUP (ハングアップ) および SIGQUIT (中止) シグナルのどちらかに対してハンドラをインストールした場合でも、これらのシグナル設定を変更します。
ID によって指定たプロセスと同じグループに属するすべてのプロセスは、SIGHUP (ハングアップ) および SIGQUIT (中止) シグナルを受け付けません。また、制御端末への出力は、すべて nohup.out ファイルにリダイレクトされます。-F を指定すると、nohup は、各プロセスに制御を強制します。-a を指定すると、プロセスが SIGHUP (ハングアップ) および SIGQUIT (中止) シグナルのどちらかに対してハンドラをインストールした場合でも、これらのシグナル設定を変更します。
/usr/xpg4/bin/nohup によって実行されるプロセスは、SIGHUP シグナルを受け付けません。
nohup ユーティリティーは、プロセスを SIGTERM (終了) シグナルに影響されないようにはしないため、プロセス自身またはシェルが SIGTERM に影響されないようにしていないかぎり、プロセスは SIGTERM シグナルを受信します。
nohup.out が現在のディレクトリに書き込み可能でない場合、$HOME/nohup.out に出力先が変更 (リダイレクト) されます。ファイルが作成された場合、そのファイルは読み取り権と書き込み権 (600) を持ちます。chmod(1) を参照してください。標準エラーは、端末の場合出力先を標準出力に変更され、その他の場合は変更されません。nohup が実行するプロセスの優先度は変更されません。
次のオプションがサポートされています。
どのような場合でも、対象プロセスの設定を変更します。このオプションは、-p または -g と一緒に使用した場合にのみ有効です。
制御を強制します。別のプロセスが制御していても、対象のプロセスを捕捉します。このオプションは、-p または -g と一緒に使用した場合にのみ有効です。
リストしたプロセスグループに対して処理を実行します。-p オプションと同時には使用できません。
リストしたプロセスに対して処理を実行します。-g オプションと同時には使用できません。
次のオペランドがサポートされています。
nohup -p が使用する、10 進数のプロセス ID。
nohup -g が使用する、10 進数のプロセスグループ ID。
呼び出すコマンドの名前。このオペランドに shell_builtins(1) ユーティリティーを指定した場合の処理結果は定義されていません。
command オペランドのコマンドを呼び出す際に引数として与える文字列。
-F フラグを使用する場合は注意が必要です。1 つの犠牲プロセスに 2 つの制御プロセスを強要すると、混乱を引き起こす可能性があります。一次制御プロセス (通常はデバッガ) が犠牲プロセスを停止しており、一次制御プロセスが当該の proc ツールの適用時に何も実行していない場合のみ、安全性が確保されます。
例 1 nohup をパイプラインまたはコマンドリストに適用する
nohup をパイプラインまたはコマンドのリストに 適用した方が望ましい場合がよくあります。これは、シェルスクリプトと呼ばれる、パイプラインおよびコマンドリストを単一のファイルに格納する方法でしか実現されません。そうすれば、次を実行できます。
example$ nohup sh file
これで、nohup は file 内のすべてに適用されます。file というシェルスクリプトを頻繁に実行する予定の場合、file 実行権を指定すれば、sh の入力が少なくて済みます。
アンパサンドを追加すると、file の内容がバックグラウンドで実行され、割り込みも無視されます (sh(1) を参照)。
example$ nohup file &
例 2 nohup -p をプロセスに適用する
example$ long_running_command & example$ nohup -p `pgrep long_running_command`
例 3 nohup -g をプロセスグループに適用する
example$ make & example$ ps -o sid -p $$ SID 81079 example$ nohup -g `pgrep -s 81079 make`
nohup の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、NLSPATH、および PATH。
ユーザーのホームディレクトリのパス名を定義します。出力ファイル nohup.out が現在のディレクトリ内に生成できない場合、nohup コマンドは HOME が示すディレクトリを使ってファイルを作成します。
次の終了値が返されます。
command で示すコマンドユーティリティーは見つかったが呼び出すことができなかった。
nohup 中でエラーが発生した、または command で示すコマンドが見つからなかった。
それ以外の場合、command オペランドの終了値が nohup の終了値になります。
標準出力が端末で現在のディレクトリが書き込み可能な場合に、nohup 実行 (結果) の出力用に使われるファイル
標準出力が端末で現在のディレクトリが書き込み可能でない場合に、nohup 実行 (結果) の出力用に使われるファイル
属性についての詳細は、attributes(5) を参照してください。
|
|
bash(1), batch(1), chmod(1), csh(1), disown(1), ksh88(1), nice(1), pgrep(1), proc(1), ps(1), sh(1), shell_builtins(1), setpgrp(1), signal(3C), proc(4), attributes(5), environ(5), standards(5)
ログアウトをしようとしたときにログインシェルとして Korn シェル (ksh88(1)) を実行し、nohup されたジョブを実行していた場合、次のような警告メッセージが表示されます。
You have jobs running.
ログアウトを有効にするために、ログアウトを 2 回行う必要があります。ただし、バックグラウンドジョブは実行し続けます。
nohup という C シェル (csh(1)) 組み込みコマンドは、終了シグナル SIGHUP の影響が及ばないようにします。しかし、出力先を nohup.out に変更しません。csh (1) を使用すると、`&' で実行するコマンドは、バックグラウンドに居る間は、自動的に HUP シグナルの影響を受けなくなります。
nohup は、コマンドシーケンスを認識しません。次のコマンドを見てください。
example$ nohup command1; command2
このコマンドでは、nohup ユーティリティーが適用するのは command1 だけです。次のコマンドを見てください。
example$ nohup (command1; command2)
このコマンドは構文的に正しくありません。