SIGINTをすべてのプロセスに名前で送信したいので、killall -SIGINTを使用しましたが、うまくいきました。これで、Cコードにsystem()呼び出しを導入してシェルスクリプトまたはシェルコマンドを実行しましたが、完了するのに約10秒かかります。この場合、シグナルを送信するときにシグナルハンドラが呼び出されないことがわかりました。
バックグラウンドで削除または実行すると、システムコールが再び機能し始めました。
誰でも管理方法を提案できますか?
ベストアンサー1
system(3) のマニュアルページで -
system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed. During execution of the
command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.
シグナルがすべてのプロセス(名前で指定)に送信されても、ここで親プロセスはsystem()呼び出し中にSIGINTを無視します。ただし、呼び出しが完了したら応答する必要があります(あなたの場合はsleep()中)。節電窓を増やしてみましたか?