web-dev-qa-db-ja.com

linux / bashで2つの進行中のプロセスを同時に実行するにはどうすればよいですか?

Linux/bashで2つの進行中のプロセスを同時に実行する方法を知りたいです。基本的に、私はNode WebサーバーとMJPG-Streamerサーバーを持っています。これらのプロセスを同時に実行したいのですが、それらは進行中のプロセスです。バックグラウンドプロセスとして実行することについて聞いたことがあります。しかし、私はそれらをフォアグラウンドプロセスと同じ優先順位にしたいと考えています。

5
calumcb

あなたが優先順位を言うとき、あなたはおそらくプロセスのニースレベルを意味します。引用するには ウィキペディア

Niceは、UnixおよびLinuxなどのUnixライクなオペレーティングシステムで使用されるプログラムです。同じ名前のカーネル呼び出しに直接マップします。 Niceは、特定の優先度でユーティリティまたはシェルスクリプトを呼び出すために使用されるため、プロセスに他のプロセスよりも多かれ少なかれCPU時間を与えます。良さ-20が最高の優先度で、19または20が最低の優先度です。プロセスのデフォルトのnicenessは親プロセスから継承され、通常は0です。

バックグラウンドでプロセスを実行しても、そのプロセスはニースレベルになりません。フォアグラウンドで実行している場合とまったく同じです。

したがって、末尾に「&」記号を付けて呼び出すことで、アプリケーション/プロセスをバックグラウンドで簡単に実行できます。

my-server &

を押して、フォアグラウンドプロセスをバックグラウンドに送信することもできます。 ctrl+z (実行を一時停止します)続いてbg+enter

コマンドjobsを使用して、実行中のバックグラウンドタスクを一覧表示できます。

フォアグラウンドに戻すには、jobs-commandを使用してそのジョブIDを見つけ、fg [job-ID]を実行する必要があります(たとえば:fg 1

バックグラウンドタスクは、すべての出力をシェルに送信します。それらの出力を表示したくない場合は、/ dev/nullにリダイレクトする必要があります。

my-server 1>/dev/null &

...通常の出力をボイドにリダイレクトします。エラーは引き続き表示されます。

5
Marlon

フォアグラウンドで同じコンソールまたはxtermから2つのプロセスを実行する場合は、ターミナルマルチプレクサであるscreenまたはtmuxセッション内で実行することを検討できます。その場合、プロセスは同じシェルプロセスではなく、別々のシェルプロセスで実行されます。

例えば。画面の使用:

  • 開始screen
  • 最初のプロセスを実行します
  • Ctrl-a cを押して、2番目のシェルセッションを開始します
  • 2番目のプロセスを開始する
  • ctrl-a ctrl-aを使用して2つのサブシェルを切り替えます

詳細は 画面マニュアル を参照してください。

0
daniel kullmann