web-dev-qa-db-ja.com

非同期シェルコマンド

正直なところ、このオンラインでの解決策が見つからないとは信じられません。私は似ているように見えるいくつかの事に出くわしましたが、本当に私が望むことをするものは何もありません...

シェルスクリプトを使用してコマンドを開始しようとしています。いつ/いつ/どのように/終了するかは気にしません。プロセスを開始して実行したいが、すぐにシェルに戻ることができるようにしたい...

それが十分明確であることを願っています、私はおそらく信じられないほど愚かなものを見逃しています

76
LorenVS

バックグラウンドでスクリプトを実行するだけです。

$ myscript &

これは、&スクリプト内。これはおそらくあなたが望むことをしないでしょう。

94
Carl Norum

誰もがdisownを忘れました。要約は次のとおりです。

  • &は、ジョブをバックグラウンドに置きます。

    • 入力を読み取ろうとするとブロックします。
    • シェルが完了を待たないようにします。
  • disownは、シェルのジョブ制御からプロセスを削除しますが、端末に接続したままにします。

    • 結果の1つは、シェルがSIGHUPを送信しないことです(シェルがSIGHUPを受信した場合、通常はSIGHUPもプロセスに送信します。終了するプロセス)。
    • そして明らかに、これはバックグラウンドジョブにのみ適用できます(フォアグラウンドジョブの実行中は入力できないためです)。
  • Nohupはプロセスを端末から切断し、その出力をNohup.outにリダイレクトし、SIGHUPから保護します。

    • プロセスは送信されたSIGHUPを受信しません。
    • ジョブ制御から完全に独立しており、原則としてフォアグラウンドジョブにも使用できます(ただし、あまり有用ではありません)。
    • 通常、&(バックグラウンドジョブとして)で使用されます。
36
Ani Menon
Nohup cmd

ターミナルを閉じてもハングアップしません。出力はデフォルトでNohup.outに出力されます

これをバックグラウンドと組み合わせて、

Nohup cmd &

そして出力を取り除きます、

Nohup cmd > /dev/null 2>&1 &

コマンドをdisownすることもできます。タイプcmdCtrl-Zbgdisown

33
Steve B.

または、プログラムを実行した後、Ctrl-Zを押してプログラムを停止し、次を入力します。

bg

最後に停止したプログラムをバックグラウンドに配置します。 ( '&'なしで何かを開始し、それを再起動せずにバックグラウンドで引き続き使用したい場合に便利です)

24
pajton

screen -m -d $command$は、切り離されたセッションでコマンドを開始します。 screen -rを使用して、開始されたセッションにアタッチできます。これは素晴らしいツールであり、リモートセッションにも非常に役立ちます。 man screenで詳細をご覧ください。

0
mluthra