目的を知りたいです。nohup
最近では。
この記事を読んだので尋ねます。
Nohupは「No Hangups」の略です。実行する別のコマンドではありません。 Nohup は、他のコマンドの起動後に Linux システムを停止しないように指示する補足コマンドです。つまり、起動したユーザーがログオフしても、完了するまで実行され続けます。 nohupの構文は簡単で、次のようになります。
nohup sh your-script.sh &
コマンドの最後にある「&」を参照してください。これにより、コマンドが背景に移動し、使用中の端末が解放されます。
Nohupは、端末で実行されるほとんどすべてのコマンドで動作します。標準のシステムコマンドとコマンドラインユーティリティだけでなく、カスタムスクリプトを使用して実行できます。
SLES 11.4やRHEL / CentOS 7.xなどのLinuxディストリビューションでは、次のことが可能です。
- SSH経由でネットワーク経由でLinuxにリモートログイン
- 以下の簡単なプログラム、または以下を実行する他のプログラムを実行してください。
./a.out &
- Linuxを終了し、putty SSH端末に終了を入力してください。
- 以下のプログラム例、またはbash、csh、またはtcshを含む他のシェルスクリプトはなくてもうまく機能します。
nohup
- SSHセッションを閉じるには、puttyにexitと入力します。これがログアウトと同じであると仮定しますか?
今日どんな目的や価値がありますかnouhup
?カーネル>= 3.xですか?私が覚えている限り(カーネル> = 2.6)、私はそれを使用したことがなく、常に問題なくnohup
使用してきました。&
誰かが私に実際のnohup
使用シナリオを提供できますか?
#include <stdlib.h>
#include <stdio.h>
/*
sample C code, to print numbers to a file named zz.tmp
the numbers 0 to 29 over 30 seconds
*/
int main ( int argc, char *argv[] )
{
FILE *fp;
int i;
i = 0;
fp = fopen("zz.tmp", "w" );
while ( i < 30 )
{
fprintf( fp, "%d\n", i++ );
sleep( 1 );
}
fclose( fp );
return 0;
}
mysleep.sh
#!/bin/bash
sleep 1000
Centos 7.7、キーボードとマウスを使ったoptiplex PCログインでは、私のアカウントはbashです。私はこれをやっnohup ./mysleep.sh
てからコントロール-Z。入力しながらjobs
見る[1]+ Stopped nohup ./mysleep.sh
Aはps -ef | grep mysleep
プロセスIDが存在すると言いますが、右上のXでターミナルウィンドウを閉じるとプロセスが消えて動作しないようですnohup
。
ベストアンサー1
SSH経由でネットワーク経由でLinuxにリモートでログインします。 Linuxからログアウトし、
exit
putty SSH端末に入力します。誰かが私に実際の
nohup
使用シナリオを提供できますか?
確かに。シェルがbashであると仮定した場合(下記の理由を参照)、またはexit
を入力するのではなく行の先頭に入力すると、ssh^D
クライアント~.
切断する:
$ ssh localhost
ssh$ sleep 3600 &
[1] 5765
ssh$ ~.
ssh$ Connection to localhost closed.
$ ps 5765
PID TTY STAT TIME COMMAND
代わりにプログラムを使用できますsleep
。~.
接続を切断する代わりに、SSHクライアントをシャットダウンしたり、実行しているコンピュータをクラッシュさせることができます。あなたのプロセスが生き残りたいですか?使用nohup
;-)
切断すると、反対側のエンドを管理するサーバープロセスが終了し、カーネル(すべてのUnix / Linuxカーネル)がsshで生成された擬似端末を解体し、セッションリーダーSIGHUP
(bashシェル)にシグナルを送信します。バッシュマニュアル:
SIGHUP
対話型シェルは、終了する前にSIGHUP
実行中または停止したすべてのジョブを再送信します。停止したジョブを送信して受信したことをSIGCONT
確認してくださいSIGHUP
。
多くの人がこれについて混乱しています。バッシュ機能そしてㅏ)カーネルによって実装された一般的なジョブ制御はSIGCONT
/SIGHUP
ペアのみを送信します。停止、それほどではない走る職業[1]そして雨)別のbash関数(shopt -s huponexit
)はログインSIGHUP
exit
bashシェルは正常に終了しても(例えばviaを介して)、そのアクションにaを送信します。
[1] 一つ停止ジョブは、1つ以上の停止したプロセスを含むジョブ(=プロセスグループ)です。 ㅏプロセスSIGTSTP
信号のために停止しSIGSTOP
たり、SIGTTIN
信号を待つ基本動作ですSIGTTOU
。ブロックシステムコール(たとえば、、など)で「休止」状態のプロセスは、停止しているとは見なされず、実行中と見なされread
ますnanosleep
。select
nohup
いつも役に立たない理由
nohup
SIGHUP
無視していくつかのリダイレクトを実行するように処理を設定するだけです。保証しない他の方法ではプロセスを終了できません。
ㅏ)nohup ..
職業停止、対話型bashは/ペアSIGTERM
だけでなく信号も送信します。SIGHUP
SIGCONT
ジョブの停止中にbashを終了しようとすると、[...]シェルは警告メッセージを表示します。 [...]中間コマンドなしで再び終了しようとすると、シェルは他の警告や停止したジョブを印刷しません。はい終了。
[終了=SIGTERM
シグナルを送信しました。これは別のksh / bash機能であり、すべてのシェルにはありません。]
これらはすべて、二重分岐や新しいセッションの作成などの簡単なトリックで解決できますがsetsid(1)
、
雨) systemd
SIGTERM
その設定がオンの場合は、SIGKILL
残りのプロセスを強制終了して(後に)ログアウトしたセッションを「クリーンアップ」することもできますKillUserProcesses
。これは一部のディストリビューションのデフォルトです。