c++ 中的信号处理

发布于 2024-10-21 06:43:47 字数 84 浏览 2 评论 0原文

我是 C++ 新手,我想知道我们什么时候需要在程序中使用信号处理?我在一些代码中看到它们在设置信号后分叉,分叉在这里意味着什么?

TIA

im new in c++,i want to know when we need to use signal handling in our program?and i saw in some codes that they fork after setting up signal,what fork means here?

TIA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小耗子 2024-10-28 06:43:47

我强烈推荐《Unix 环境中的高级编程,第二版》这本书作为您的系统指南编程。

fork(2) 产生一个新进程;它几乎完全是当前流程的克隆。但差异是巨大的:fork(2)的返回值在父级和子级中是不同的,子级有一个新的pid,新的ppid >,并且所有设置了 FD_CLOEXEC 标志的文件描述符都将在子进程中关闭(有关详细信息,请参阅 fcntl(2))。还有其他差异,但这是一个好的开始。

设置信号处理程序时,要记住的最重要的事情:使用 sigaction(2) 安装信号处理程序,而不是 signal(3)signal(3) 不可靠,可能会丢失信号。 你无能为力。您可以在信号处理程序中调用的允许函数列表位于 signal(7) 联机帮助页中。使用此列表之外的函数是危险的,并且可能会产生一些非常困难的错误。您还可以在程序中设置由主事件循环检查的标志,以便您可以在适当的时间干净地退出或打印状态或重新加载配置文件。

I strongly recommend the book Advanced Programming in the Unix Environment, 2nd Edition as your guide to systems programming.

fork(2) spawns a new process; it is almost entirely a clone of the current process. But the differences are vast: the return value from fork(2) is different in parent and child, the child has a new pid, new ppid, and all filedescriptors that had their FD_CLOEXEC flag set will be closed in the child (see fcntl(2) for details). There are other differences, but this is a good start.

When setting up signal handlers, the most important things to keep in mind: Use sigaction(2) to install signal handlers, not signal(3). signal(3) is unreliable and allows for losing signals. You can't do much. The list of allowed functions that you may call in a signal handler is in the signal(7) manpage. Using functions outside this list is dangerous and can create some very difficult bugs. You can also set flags in your program that are checked by your main event loop, so you can cleanly exit or print status or reload config files at appropriate times.

甜味超标? 2024-10-28 06:43:47

Fork 是 C 中的一个内置函数,它使程序创建其自身的子实例,该子实例在调用 fork 时开始执行。 Shell 在运行命令之前进行分叉,这很好,因为如果该命令导致崩溃或冻结,则可以杀死程序的分叉实例,同时保持父级活动。

Fork is a built-in function in C that causes the program to create a child instance of itself, which begins execution at the point fork was called. Shells fork before running a command, which is good because if the command causes a crash or freeze, the forked instance of the program can be killed while keeping the parent alive.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文