gpt4 book ai didi

c - 如何在发送特定信号后阻止进程关闭?

转载 作者:行者123 更新时间:2023-11-30 16:25:19 25 4
gpt4 key购买 nike

我需要创建一个程序,它将创建处理进程的子进程。在调用 SIGXCPU 的情况下,子进程应该关闭,但是当收到其他信号时,进程不应该关闭,而是显示信息。如何更改 signal_handler 函数以停止关闭我的进程?

我从第二个终端窗口调用信号。

void signals_handler(int signal) {
psignal(signal,"\nRecived signal");
printf("Signal number is: %d\n", signal);
return;
}

void sig_XCPU(int signal() {
signal(XCPU, sig_XCPU);
}

...

int main(void)
{

if(fork() == 0) {
print("PID: %d", getpid();
signal(SIGXCPU, sig_xcpu)
for(int = 1; i < 65; i++) {
if(i != 24) //SIGXCPU number
signal(i, signals_handler);
}
sleep(100);
return 0;
}
}

return 0;
}

最佳答案

你可以这样测试:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

void signal_handle(int sig) {
switch (sig) {
case SIGXCPU: {
char st[] = "child recesive SIGXCPU, quit\n";
write(STDOUT_FILENO, st, sizeof(st));
exit(EXIT_SUCCESS);
break;
}
case SIGINT: {
char st[] = "child recesive SIGINT\n";
write(STDOUT_FILENO, st, sizeof(st));
break;
}
default: break;
}
return;
}

void set_signal() {
signal(SIGXCPU, signal_handle);
signal(SIGINT, signal_handle);
}

int main() {
pid_t pid = fork();
if (pid == 0) { // child
set_signal();
char st[] = "child set signal\n";
write(STDOUT_FILENO, st, sizeof(st));
for (;;)
;
}
// parent
sleep(3); // wait child set_signal
// test SIGINT
{
char st[] = "parent send SIGINT\n";
write(STDOUT_FILENO, st, sizeof(st));
kill(pid, SIGINT);
}
sleep(3);

// test SIGXCPU
{
char st[] = "parent send SIGXCPU\n";
write(STDOUT_FILENO, st, sizeof(st));
kill(pid, SIGXCPU);
}
wait(NULL);

return 0;
}

关于c - 如何在发送特定信号后阻止进程关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com