Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在子进程中多次调用kill()后,VM将重新启动。 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效信号器(内部信号){ 不能确定是哪个虚拟机?如果是这样的话,那可能是你的虚拟机中的一个错误。可能它会使内核崩溃。我使用的是_C++_Linux_Signals - Fatal编程技术网

C++ 在子进程中多次调用kill()后,VM将重新启动。 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效信号器(内部信号){ 不能确定是哪个虚拟机?如果是这样的话,那可能是你的虚拟机中的一个错误。可能它会使内核崩溃。我使用的是

C++ 在子进程中多次调用kill()后,VM将重新启动。 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效信号器(内部信号){ 不能确定是哪个虚拟机?如果是这样的话,那可能是你的虚拟机中的一个错误。可能它会使内核崩溃。我使用的是,c++,linux,signals,C++,Linux,Signals,在子进程中多次调用kill()后,VM将重新启动。 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 无效信号器(内部信号){ 不能确定是哪个虚拟机?如果是这样的话,那可能是你的虚拟机中的一个错误。可能它会使内核崩溃。我使用的是VirtualBox。孩子杀死家长也很奇怪。通常情况下,如果有必要这样做的话,家长要负责杀死自己。我打算让孩子向家长发送三次信号。如果你杀死了家长e parent,getppid()将在下一次调用中返回其他内容。父级的父级(祖父母)或什么都不返

在子进程中多次调用kill()后,VM将重新启动。
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效信号器(内部信号){

不能确定是哪个虚拟机?如果是这样的话,那可能是你的虚拟机中的一个错误。可能它会使内核崩溃。我使用的是VirtualBox。孩子杀死家长也很奇怪。通常情况下,如果有必要这样做的话,家长要负责杀死自己。我打算让孩子向家长发送三次信号。如果你杀死了家长e parent,
getppid()
将在下一次调用中返回其他内容。父级的父级(祖父母)或什么都不返回?然后第二次终止触发重新启动,可能是因为它终止了内核中的某些重要内容。
#include <signal.h>
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

void sigHandler(int sigNum){

    cout << "\nSignal has been sent." << endl;

}

int main(){

    pid_t PID = fork();

    if(PID == -1){

        perror("fork");
        exit(EXIT_FAILURE);

    }    

    if(PID == 0){

        cout << "\nChild will now send a signal to the parent process." << endl;

        kill(getppid(), SIGINT);    

        cout << "\nChild will now send a 2nd signal." << endl;

        kill(getppid(), SIGINT);

        cout << "\nChild will now send a 3rd signal." << endl;

        kill(getppid(), SIGINT);

    }else{

        struct sigaction action;

        action.sa_handler = sigHandler;

        sigemptyset(&action.sa_mask);    

        int checkErr = sigaction(SIGINT, &action, NULL);

        if(checkErr == -1){

            perror("sigaction");
            exit(EXIT_FAILURE);

        }

        wait(NULL);

        cout << "\nParent process is now finishing." << endl;

    }
}