プロセスがプロセス外でフォークシステムコールを実行するように強制できますか?

プロセスがプロセス外でフォークシステムコールを実行するように強制できますか?

ユーザー入力を待つプログラムがあるとしましょう。ユーザ入力が「A」の場合、プログラムは状態s_aに入り、ユーザ入力が「B」の場合、プログラムは状態s_bに入る。どの状態が必要かわからないので、両方の入力を試してみたいです。だから私はこのプログラムを分岐して親プロセスに「A」を入力し、子プロセスに「B」を入力できるようにしたいと思います。これはLinuxで達成できますか?

だから私はコマンドのようなものが欲しい

$ sudo make_that_process_call_fork_syscall PID

毎秒数回これを行うので、単にプログラムを再起動することは非常に非効率的です。 (このプログラムはCoqクリーンアップ証明支援プログラムです。)

ベストアンサー1

forkいいえ。プログラムされていないと、プログラムや他の任意のシステムコールを実行できません。通常、プロセスは、定義されたAPI(たとえばptrace)を介している場合を除き、他のプロセスが任意のコードを実行することを許可されません。これを許可したらfork

おそらくあなたが試すことができる最善の方法は、この時点でプロセスに接続し、予想されるプロンプトが表示されたら手動で呼び出すことですgdbforkしかし、これはプログラムに意図しない結果をもたらす可能性があり、一般に良い考えではありません。同じプロセスの複数のコピーを実行しようとしているので、これは拡張可能なアプローチではなく、他のものを試す方が良いでしょう。

おすすめ記事