1

こんにちは、C++ を使用してバイナリ ファイルを実行し、それを強制終了する必要があります。

私のコードは次のようになります

static int PROCESS_PID=0;

void startService(bool startservice){

if(startservice==true){
 pid_t PID = fork();
 if(PID == 0) {
   PROCESS_PID = getpid();
   printf("the child's pid is: %d\n", PROCESS_PID);
   system("./process");
 }
}

else{
 kill(PROCESS_PID, SIGUSR1); //kill process inside child process
 }

}

しかし、プロセスを強制終了すると、プログラム全体が終了します。何か案が ?私のコードに何か問題がありますか?

ありがとう....

4

2 に答える 2

3

呼び出すsystem()と、3 番目のプロセス (pid を持っていないプロセス) が開始されます。exec()代わりに使用してください。

さらに悪いことに、kill()呼び出しはその場合にのみ行われ、startservice!=trueこの場合PROCESS_PID==0は ... したがって、プロセス 0 を強制終了します (これにより、現在のプロセス グループ内のすべてのプロセスにシグナルが送信されます)。

于 2013-09-09T11:47:37.297 に答える
1

それが機能しない理由は、実行したいコマンドを実行するために/を実行するようにfork()、二重になっているためです。system()fork()exec()

子プロセスをより適切に制御したい (強制終了を含む) 場合は、自分system()で実行する場所の独自のバージョンを記述します。fork()exec()

このノックを行う方法の例は、インターネット上にたくさんあります。

于 2013-09-09T11:47:13.120 に答える