首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在父进程被终止时杀死子进程

在父进程被终止时杀死子进程是一种常见的操作,以确保子进程不会在父进程结束后继续运行。这可以通过在父进程中使用信号处理程序来实现。

在Linux系统中,可以使用signal()函数来设置信号处理程序。例如,可以使用以下代码来设置父进程在接收到SIGTERM信号时杀死子进程:

代码语言:c
复制
#include<signal.h>
#include <unistd.h>
#include <sys/wait.h>

void sig_handler(int sig) {
    pid_t pid;
    while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) {
        kill(pid, SIGTERM);
    }
    exit(0);
}

int main() {
    signal(SIGTERM, sig_handler);
    pid_t pid = fork();
    if (pid == 0) {
        // 子进程代码
    } else {
        // 父进程代码
    }
    return 0;
}

在这个例子中,当父进程接收到SIGTERM信号时,信号处理程序sig_handler()会被调用。在信号处理程序中,我们使用waitpid()函数来获取所有子进程的ID,并使用kill()函数向它们发送SIGTERM信号,以便它们终止。

在Windows系统中,可以使用CreateProcess()函数来创建子进程,并使用TerminateProcess()函数来杀死子进程。例如,可以使用以下代码来创建子进程并在父进程被终止时杀死子进程:

代码语言:c
复制
#include<windows.h>
#include<process.h>

HANDLE hProcess;

void sig_handler(int sig) {
    TerminateProcess(hProcess, 0);
    exit(0);
}

int main() {
    signal(SIGTERM, sig_handler);
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    PROCESS_INFORMATION pi;
    ZeroMemory(&pi, sizeof(pi));
    CreateProcess("child.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    hProcess = pi.hProcess;
    // 父进程代码
    return 0;
}

在这个例子中,我们使用CreateProcess()函数创建子进程,并将子进程的句柄存储在全局变量hProcess中。当父进程接收到SIGTERM信号时,信号处理程序sig_handler()会被调用。在信号处理程序中,我们使用TerminateProcess()函数来杀死子进程。

总之,在父进程被终止时杀死子进程可以通过在父进程中使用信号处理程序来实现。在Linux系统中,可以使用signal()函数和kill()函数来设置信号处理程序和发送信号。在Windows系统中,可以使用CreateProcess()函数和TerminateProcess()函数来创建子进程和杀死子进程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

31分41秒

【玩转 WordPress】腾讯云serverless搭建WordPress个人博经验分享

领券