簡體   English   中英

Fork如何使用PID終止進程

[英]Fork How to Kill A process with PID

大家好我必須使用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
 }

}

但是當我殺死這個過程時,整個程序就會退出。 任何想法 ? 我的代碼有什么問題嗎?

謝謝....

當你調用system()你正在開始第三個進程 - 一個你沒有pid的進程。 請改用exec()

更糟糕的是,你的kill()調用僅在startservice!=true的情況下進行,並且在這種情況下PROCESS_PID==0 ...所以你要殺死進程0(它會將信號發送到當前的所有進程)過程組)。

它不起作用的原因是因為你是雙fork() ,因為system()將執行fork() / exec()以執行你想要運行的命令。

如果你想更好地控制子進程(包括殺死它),那么編寫你自己的system()版本,你自己執行fork()exec()

有很多例子說明如何在互聯網上敲門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM