fork()
子プロセスに(経由で)ターミナルへのフォアグラウンドアクセスを与えようとしています。
その後fork()
、子プロセスで次のコードを実行します。
setpgid(0, 0);
と:
setpgid(child, child);
親プロセス内。
これにより、子に独自のプロセスグループが与えられます。の呼び出しはsetpgid()
正しく機能します。
今、私は子供にターミナルへのアクセスを許可したいと思います。
setpgid()
電話の後、子供に次のものを追加しました。
if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}
その後、execv()
スポーンするコマンドがあります/usr/bin/nano
。
ただし、nano
起動する代わりに何も起こらず、端末はユーザー入力を期待しているように見えます。
さらに、tcsetpgrp()
呼び出し後にコードが実行されないようです。
SIGCONT
子プロセスを機能させるには、子プロセスにシグナルを送信する必要があることをどこかで読みました。プロセスが停止した場合、どうすればそれを行うことができますか?親は信号を送信する必要がありますか?
それが解決策である場合、どうすれば信号を送信SIGCONT
できますか?
raise(SIGCONT);
また、これが役立つかどうかはわかりませんが、次のコマンドnano
を使用してプログラムを実行すると、コードは正常に機能し、生成されます。
exec ./program
それ以外の:
./program
何か案は?本当にありがとう!