2016-09-05 7 views
2

を待っている他のプロセスの標準入力にデータを送信します。このようプログラムを実行は、次のコードがありPPOLL

は、PPOLLは(パイプ経由で標準入力にデータを渡す)ウェイクアップされているようです:

$ echo 1 | ./main 
$ 

しかし、別のシェルからのプロセスに何かを送ることは目覚めていないPPOLL:

まずシェル:

$ ./main 

第2シェル:

$ echo 1 > /proc/$(pgrep main)/fd/0 

その後、最初のシェルには1が印刷されていますが、ppollは起動しません。他のシェルからプロセスのstdinにデータを正しく送るにはどうすればppollが起動するのでしょうか?

+0

あなたの質問が明確ではないと思います。あなたが*「別のシェルからプロセスに何かを送る」と言うとき*別の 'tty'を意味しますか?もしそうなら、彼らはまったく異なる 'stdin'を持っています。 –

答えて

3

外部から(つまりFIFOまたはパイプを介して)データを供給できるようにプロセスが特別に起動されない限り、単純に不可能です。プロセスの制御端子にさえ/proc/$PID/fd/0(すなわち、標準入力ストリーム)点しかし

ので(リダイレクションの非存在下で)行う/proc/$PID/fd/1/proc/$PID/fd/2(すなわち標準出力と標準エラーストリーム):

$ ls -l /proc/$$/fd 
lrwx------ 1 user user 64 Sep 6 01:36 0 -> /dev/pts/3 
lrwx------ 1 user user 64 Sep 6 01:36 1 -> /dev/pts/3 
lrwx------ 1 user user 64 Sep 6 01:36 2 -> /dev/pts/3 

端末は疑似デバイスであり、読み書きが可能です。プロセスがそれからを読み取るとき、端末はキーボードから入力されたデータを提供するか、または他の手段(例えば、クリップボードから貼り付けられる)によってデータを提供する。 は、端末にと書き込むと、データが表示されます。今度は/proc/$PID/fd/0に書き込むと、ターゲットプロセスの標準入力ストリームではなく端末に書き込むため、データは表示されますがプロセスは無関係です。

関連する問題