- ベストアンサー
既存プロセスの標準入力を開く方法
Linuxにおいて、バックグラウンドで実行され、入力待ちで停止しているプロセスの標準入力を再び開いて書き込む手段はないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関係あるかどうかわかりませんが、 ・@ITのカーネルの仮想化機能「KVM」を使うには http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a044kvm.html という記事の中で、 ================================================== lsofコマンドでQEMUのコンソールデバイスを調べる。 # lsof -c qemu-kvm | grep pts qemu-kvm 8509 root 12u CHR 136,2 4 /dev/pts/2 # screen /dev/pts/2 ================================================== のようにして、 QEMUのコンソールを別端末から表示しているようです。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10359)
jobsで表示されるなら、#1の方の回答の通りだし、表示されないなら無理だと思います。
- masa19
- ベストアンサー率75% (22/29)
起動したシェルからならば、 % jobs でジョブ番号を確認し、 % fg [%ジョブ番号] で、フォアグラウンドに持ってこれます。 再度、バックグラウンドにするときは、 Ctrl-Zで中断した後に、 % bg とすると、バックグラウンドで実行されます。
補足
回答ありがとうございます。 具体的にはシェルスクリプトの中で起動した(外部)コマンドに対する標準入力なのですが、起動したシェルにアクセスする術はあるのでしょうか? さらにこのシェルもコンソールから直接起動したものではなく、かなり深いプロセス階層の子プロセスとなっています。 これから起動するプロセスならばpopen等を利用してプロセス間通信をすることができるようですが、既に起動しているプロセスに対してこれを行う手段はあるのでしょうか?
お礼
御回答ありがとうございます。lsofというコマンドがあることを初めて知りました。 私の場合は非対話シェルから実行されたプロセスのため端末を持たず、上記の方法をそのままは使えないと思います。 ただ、lsofの機能は「ファイルを開いているプロセス情報の表示」ということなので、Linuxでは標準入出力も含めてデバイスはすべてファイルとして扱われていることを考えると、端末を持たないプロセスの標準入力にアクセスする手段もありそうに思います。 もう少し調べてみます。ありがとうございました。