CLIでは、時々私が入力するコマンドを完了するのに時間がかかり、時々それがいつ起こるかがわかります。私はLinuxの「バックグラウンド」などについて少し混乱しています。
待たずにすぐにプロンプトを返したくないとCLIに通知する最も一般的な(またはユーザーフレンドリーな)方法は何ですか?進行状況バーや忙しいスピナーだけが提供されている場合は本当に良いようです!
答え1
コマンドを実行する前に、&
コマンドラインに追加してバックグラウンドで実行できます。
long-running-command &
コマンドを起動したら、[次へ]を押してCtrlZコマンドを一時停止してbg
バックグラウンドに切り替えることができます。
long-running-command
[Ctrl+Z]
bg
答え2
プロセスをバックグラウンドで送信することに加えて、端末を複雑にするテキスト出力について心配する必要はないので、これはすべてのお気に入りです。
nohup command &
これはバックグラウンドでプロセスを実行するだけでなく、ログ(nohup.out
現在のディレクトリまたは可能でない場合はホームディレクトリから呼び出されます)を生成し、現在のシェルを閉じたりログアウトしたりするとサブプロセスが受信するのを防ぎません。プロセスが終了したときにシグナルを受け取る親プロセス(たとえば、SIGHUPを介して親プロセスからログアウトするか、現在のシェルを閉じます)。
他の方法がありますが、disown
これはメソッド自体ではなく、他の答えの拡張だけです。
command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want
これらのコマンドを使用すると、プロセス出力を簡単に復元することはできません。ハッカーのやり方で行います。
答え3
これはあなたが望むものかもしれません
my_command > output.log 2>&1 &
output.log
これにより、stdoutとstderrを指定できる場所にリダイレクトするコマンドが開始されます。出力の保存にまったく興味がない場合は、/dev/null
実際のファイルの代わりに使用できます。
&
コマンドの実行中にコマンドを入力できるように、コマンドはバックグラウンドで実行されます。
2>&1
すべての出力がキャプチャされるように、stderrをstdoutにリダイレクトします。
また、このようなコマンドを実行すると、カーネルで次のような確認が必要です。
[2] 1234
これは、プロセスがバックグラウンドで実行されており、対応するIDがあるため、1234
必要に応じて後で終了できることを意味します。kill -9 1234
答え4
&
(完全性のために - すでに答えています:)コマンドの後に以下を追加することで、バックグラウンドにコマンドを置くことができます。
long_command with arguments > redirection &
あなたの質問の他の部分を解決するためにこの答えを追加しています。
進行中のバックグラウンドコマンドを表示するスピナーと実質的に同等ではありませんが、バックグラウンドコマンドjobs
のステータスを入力または表示できますjobs -l
。バックグラウンドコマンドとそのコマンドが実行されているか、信号によって停止されたか(例:使用^Z
)、またはインタラクティブ入力を待機するため、時々停止したかどうかが表示されます。