问题标签 [signal-handling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 多线程环境中的信号处理函数
在我的多线程 GUI 应用程序中,我有以下信号处理代码。我想改进此代码,使其正确且线程安全,但在信号处理中有些事情我并不完全理解:
- 信号是在进程或线程级别处理的(我可以有线程特定的信号处理程序)吗?
- signal_handler 函数在哪个线程上下文中执行?
- 是否可以在短时间内发送许多 SIGTERM 信号?
- 使用互斥锁来防止 signal_handler 的并行执行是否有意义?
我在我的 init 函数中注册了信号处理程序:
linux - Mono 中的 Intel CPU OpenCL 被 SIGXCPU (Ubuntu) 杀死
前段时间,我使用 OpenCL(是学校作业)编写了简单的 boids 模拟,使用 C#、用于 OpenCL 的 Cloo 和用于 OpenGL 输出的 OpenTK。我在 Windows7 上使用 AMD CPU 实现 OpenCL 和朋友的 NVidia 对其进行了测试。现在我在 Linux (Ubuntu 12.04) 上试了一下。我安装了amd app sdk和intel sdk。它编译正常,参考 CPU 实现与图形输出工作正常。但是当我尝试运行 OpenCL 版本时,它会运行大约 1 秒(显示 OpenGL 中的有效输出),然后被 SIGXCPU 杀死。试图谷歌一些已知问题,但一无所获。所以我试图捕捉并忽略这个信号,但每次我尝试时,程序都会挂起。当我将单声道设置为捕获一些不同的信号(例如 SIGPIPE)时,它运行正常(减去 opencl 时的终止)。在 Mono 中,我尝试了常见问题解答中所述的 Mono.UnixSignal
然后一些不会挂起但也无济于事的东西:
乃至
和
即使我从 main 中删除其他所有内容,它仍然会在“触摸”该信号后的某个时间挂起。
还有一件奇怪的事:
在 Application.EnableVisualStyles(); 之后的某处使用 SIGXCPU 杀死应用程序;当我之前设置它时,这次甚至没有接触 OpenCL。
我在 Mono 中错过了什么吗?是否在内部某处使用此信号会妨碍 OpenCl?
c - 当接收到来自“killall”或“kill -p pid”的kill信号时,如何在退出程序之前执行处理函数?
我有以下代码:
我想通过在程序退出之前添加一个信号句柄函数来执行 pthread_exit() 来完成我的代码。
怎么做 ?
perl - Perl Term::ReadLine::Gnu 信号处理困难
我正在使用 Term::ReadLine::Gnu 并且遇到了信号处理问题。给定下面的脚本和发送到脚本的 TERM 信号,TERM 信号的处理程序直到按下回车键后才会触发。使用 Term::ReadLine:Perl 不会发生这种情况。
我读过 Term::ReadLine::Gnu 有自己的内部信号处理程序,但坦率地说,我不知道如何使用它们。
我已经查看了http://search.cpan.org/~hayashi/Term-ReadLine-Gnu-1.20/Gnu.pm#Term::ReadLine::Gnu_Variables尝试将 rl_catch_signals 变量设置为 0,但这没有帮助. 理想情况下,我想使用 Gnu 信号处理程序,但我也会满足于禁用它们。
具体来说,我需要在收到信号后触发 TERM 处理程序,而不是等待按下回车键。
任何帮助或建议当然不胜感激!
python - 保存信号处理程序返回的变量?
我正在使用 PyGTK 2 在 Python 2.7 中编写应用程序。基本上我创建 TreeView 小部件,用内容填充它,然后检查选择是否更改。如果是真的,我希望在 TextView 框中打印选择。我的想法是获取选定的值、更新文本和刷新小部件。这是我获得所选值的方式:
定义:
如您所见, selection_changed 处理程序返回值。问题是在调用处理程序后如何保存该值?我知道我可以使用全局变量或类属性,但这不是一个选项。我希望代码看起来整洁。即这样:
但当然它不起作用。
c++ - APR 线程和信号处理
我目前正在尝试使用 Apache Portable Runtime 实现线程。一切正常,但由于缺乏文档或示例,我不确定我是否按照预期的方式进行操作。
我需要两个线程和信号处理来捕获控制台上的 CTRL-C 来清理我的服务器和可能的线程。这是我目前的做法:
这或多或少符合预期。我唯一不确定的是清理工作是否正常。
清理功能似乎被调用不止一次(字符串“Caught signal..”在终端上出现不止一次)。有没有办法防止这种情况?这有问题吗?
我发现了不止一个使用后清理 APR 线程的示例。我的方式是否足够或者我需要一些评论的东西?还是我完全错了?
signals - 将 swapcontext 与信号处理程序一起使用
我正在尝试构建像 pthreads 这样的用户级线程库。
我想在信号处理程序中使用 swapcontext。但由于它不是信号安全功能,因此不建议使用它。有人可以建议如何在信号处理程序中使用它。我可以通过禁用信号来使用它吗?
也有人可以解释一下信号安全功能的确切含义吗?
perl - 什么是共享 perl 脚本的可重新加载配置参数的好方法
我有很多具有通用配置的小型 Perl 守护进程。
目前,我使用它来加载设置:
在 myconfig.pm 中:
在 daemon.pl 中:
这工作得很好。但是现在我有了新的要求,即在USR1
收到信号时重新加载配置。我知道
但接下来呢?use MyConfig
再次?看起来很生气。
我的脚本必须在许多不同的平台和从 5.8 到现代的不同 perl 版本上运行,所以我试图避免使用 CPAN 模块。
请为我指出有关此任务的良好解决方案。
c - 信号处理程序不会看到全局变量
这就是问题所在:这个程序应该从标准输入接收输入并计算插入的字节数;SIGUSR1 信号将停止主程序并在文件标准错误上打印当我发送 SIGUSR1 时复制了多少字节。
这就是我的老师希望我这样做的方式:在一个终端运行
而从第二个终端发送信号
其中 xxxx 是 cpinout 的 pid。
我更新了我以前的代码:
debugging - 在 QT Creator 中运行调试器时处理“停止”发送的信号
在 QT Creator(在 Linux 机器上)中正常运行我的程序时,当我点击“停止”按钮时,我能够处理 SIGTERM 信号并优雅地关闭我的软件。但是,当我在调试模式下运行并点击同一个按钮时,似乎没有执行任何信号,程序就死了。在调试模式下运行时停止按钮是否会发送其他信号,如果是,是什么信号?甚至可以在 QT Creator 中处理这个问题吗?它是否会发送一个我什至无法处理的信号,例如 SIGKILL?如果我向我的软件进程发出 SIGTERM 信号,我可以优雅地关闭在调试模式下完成的软件,但我希望有一种方法可以在 QT Creator 中执行此操作,而不是使用另一个终端窗口。
谢谢!