c - 发送特定信号后如何阻止进程关闭?
问题描述
我需要创建一个程序,该程序将创建处理进程的子进程。在调用 SIGXCPU 的情况下,子进程应该关闭,但是当收到其他信号时,进程不应该关闭,而是显示信息。如何更改信号处理程序函数以停止关闭我的进程?
我从第二个终端窗口调用信号。
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# - 设置 Blazor Webassembly 环境的正确方法是什么?
- usb-debugging - 使用 scrcpy 进行 USB 调试
- javascript - Javascript 从 unsplash api 更新背景图像的时间太长
- python - 当日志写入器包含在函数中时打印正确的“funcName”
- c++ - Sublime Text 3 未显示正确的输出 C++
- node.js - 在 Reactjs 中将数据发送到 Nodejs 后端以进行 API 调用
- javascript - 减法时在reactJS中获取未定义的值
- php - 换行符无法在 php 中按预期工作
- delphi - 如何设置面板位置始终高于孔区域?
- python - 哪个 Python 版本用于构建 PyPi 包?