std入力とstd出力リダイレクトを使用してバックグラウンドでプロセスを実行する

std入力とstd出力リダイレクトを使用してバックグラウンドでプロセスを実行する

バックグラウンドでプロセスを実行し、入出力をリダイレクトする方法はありますか? Javaスキャナを使用してSystem.inを入力として追加するJavaプログラムがあります。だから私はファイルから読み取るためにstd入力をリダイレクトしたいと思います。まず、これが可能かどうかはわかりません。以下は機能しません:

$: java Bagels << in.txt &

ただ中断されます。

また、同時に実行される他のプログラムで使用できるように、プログラムの出力を別のファイルに書きたいと思います。理想的には次のようになります。

$: java Bagels << in.txt & >> out.txt &
$: python player.py << out.txt & >> in.txt &

ベストアンサー1

最初の例は、次のように開始する必要があります。

java Bagels < in.txt

作成したとおり、これは次Bagelsのように実行されます。標準入力ファイルin.txt1から。後ろにアンパサンドを追加すると、&プログラムがバックグラウンドで実行され、より多くのコマンドを入力できるように、端末のコマンドプロンプトが準備されます。

in.txt私は2番目の例がこのようになると思いますが、out.txt通常、あるプログラムの出力を別のプログラムの入力に供給し、2番目のプログラムの出力を最初のプログラムの入力に供給するのは少し混乱しています。良いアイデア。

java Bagels < in.txt | player.py > out.txt

その機能はin.txt次に追加することです。標準入力Javaプログラム(<ファイル内)、そのプログラムを追加します。標準出力出力先標準入力入力player.pyして書きます標準出力Pythonプログラムをファイルに出力しますout.txt>TOファイルが書き込み専用モードで切り捨てられ、>>追加に置き換えられたり、1<>切り捨てられずに読み書きモードで開きます)。

最後に、最初の文に書いた質問に答えてください。」バックグラウンドでプロセスを実行し、入出力をリダイレクトする方法はありますか?「、こう集めておけばいい。

java Bagels < in.txt > out.txt &

¹ここで読み取り専用モードで開くには、<>または0<>ksh93に置き換えて読み取り+書き込みモードで開きます。しかし、実際にstdinを読み書きモードで開く必要がある場合は非常にまれです。

おすすめ記事