gpt4 book ai didi

c - 如何改变C程序中SIGTERM的含义

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

我最近遇到了信号问题。我想用 C 编写一个程序,在将信号发送到进程后打印任何内容。例如:如果我将 SIGTERM 发送到我的进程(只是正在运行的程序),我希望程序打印出例如“杀死进程被拒绝”而不是杀死进程。那么如何做到这一点呢?如何强制进程捕获并更改此类信号的含义。另外我有一个问题,是否有可能杀死 init 进程(我知道这是一个愚蠢的问题,但我想知道 linux 如何处理这样的信号,以及如果我输入: 从技术上讲它会是什么样子sudo Kill -9 1.

最佳答案

不要使用信号处理程序进行打印。您可以设置一个 volatile sig_atomic_t类型的变量,并让您的主线程检查它(请参阅this示例)。

当你的主线程没有其他事情可做时(这应该是大多数时间),让它阻塞在一个阻塞函数调用上(例如sleep()),当收到信号(并将 errno 设置为 EINTR)。

<小时/>

C++ 陷阱:与 C sleep() 函数不同,std::this_thread::sleep_for()(在最新版本的 glibc 中) 收到信号时唤醒。

<小时/>

关于是否可以杀掉pid 1,参见this question 。答案似乎是否定的,但我记得当我使用 init=/bin/bash 启动并随后退出这个 shell 时,Linux 变得非常脾气暴躁 - 不得不硬重启。

如果你想找麻烦,最好 kill pid -1 .

关于c - 如何改变C程序中SIGTERM的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697586/

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