问题标签 [sigint]

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.

0 投票
3 回答
81575 浏览

python - Python:捕捉 Ctrl-C 命令。提示“真的要退出(y/n)”,否则继续执行

我有一个可能执行时间很长的程序。在主模块中,我有以下内容:

这工作正常,但我希望有可能在捕获 SIGINT 时暂停执行,提示用户是否真的想退出,如果他们决定不想退出,则恢复我在 run_program() 中停止的地方。

我能想到的唯一方法是在一个单独的线程中运行程序,让主线程等待它并准备好捕获 SIGINT。如果用户想退出主线程,可以进行清理并杀死子线程。

有没有更简单的方法?

0 投票
1 回答
304 浏览

c - 为什么这段代码没有按预期工作?

我最近开始使用信号进行编程。我在 C 中的多线程服务器代码中使用了它们。这是与信号相关的代码部分,但它不能正常工作:

信号处理程序:

}

Main() 内部:

我在这里阅读了这个方法。我尝试kill -s SIGINT <pid of my program>从不同的终端窗口发送,但程序退出。

0 投票
0 回答
670 浏览

python-2.7 - 为什么发送到 Python 脚本的 SIGINT 会终止 MySQL 连接?

我在将 SIGINT 发送到使用 MySQLdb(mysql-python)连接到 MySQL 数据库的 python 脚本时遇到问题。python 脚本在无限循环中运行,我想在完成脚本的当前循环后捕获 SIGINT 并优雅地退出。但是,SIGINT 会中断正在运行的任何 mysql 查询,并与服务器断开连接。这会导致错误,因为 python 脚本试图完成它的当前循环。

我已将行为范围缩小到以下脚本:

无穷大.py

如果我从命令行运行此脚本,然后从另一个 shell(使用sudo kill -INT $PID)向它发送一个 SIGINT,我会得到以下输出:

handling SIGINT发送信号后立即输出,紧随其后Finished very long query。所以很明显,execute通话被打断了。我还用 gdb 调试了上面的脚本,当我发送 SIGINT 时,gdb 停止并给出以下输出:

有趣的是,当我通过 gdb 运行 python 信号处理程序的打印行时,它不会执行,但它确实会中断 libpthread.so.0 中的执行。

MySqldb 包底层的 C 代码是否注册了它自己的信号处理程序?查询是否在单独的线程中运行,如果是,它是否接收信号以及 python 脚本?

有什么办法可以防止这种行为?我发现我可以修改信号处理程序以重新连接到 MySQL(通过MySQLdb.connect再次调用。这将防止任何未来的查询失败,但它仍然会产生当前查询中止的效果。

谢谢克里斯

0 投票
1 回答
1633 浏览

linux - qemu 中的 control+c 信号

谁能帮我理解 qemu 如何处理 control+c 信号?在哪个文件中?(或一些有用的链接来理解它)我想制作路线(如调用图)。实际上,此信号不适用于我的 mips 客人(但在同一主机的马耳他 mips 上工作)谢谢,

主机和来宾操作系统:Linux 来宾架构:Mips64 主机架构:x86 QEMU 版本:qemu-1.0.1

0 投票
1 回答
1820 浏览

linux - 控制+c 不工作

我正在使用具有 MIPS 架构的 linux 2.6.32.13-Cavium-Octeon。当我按 ctrl+c 终止进程时,在终端上;什么都没发生。如何在我的内核中跟踪它以处理它的问题? stty -a输出是:

tty有什么问题吗?因为当我make menuconfig没有“启用 tty”选项并且命令bind -v也不起作用时。

谢谢

0 投票
3 回答
1429 浏览

linux - 如何使用“ctrl c”杀死所有进程?

我有一个从 C++ 代码编译的 exe 文件。而我使用bash搭建Linux环境并调用这个.exe程序。

现在谈到问题,大多数时候,用户希望ctrlc在完成使用程序或不想继续时使用来杀死进程。

bash 进程被ctrlc正确终止,但是,.exe它通常在没有被杀死的情况下运行。所以用户需要使用kill -9 xxx杀死进程。如果他们忘记杀死,他们的 CPU 可能会被完全占用。

我该如何着手解决这个问题?我应该为 exe 文件的代码或 bash 脚本做点什么吗?

谢谢

0 投票
1 回答
3917 浏览

linux - 在bash中捕获键盘中断

我在 bash 中有一个函数可以捕获键盘中断。该函数如下所示:

现在,在同一个脚本中,我有另一个名为的函数,它使用标准, ,进程install()一个接一个地从源代码安装几个包。这个想法是在一个接一个地运行 3 个安装时捕获用户中断。问题是,我在哪里放置以下语句:./configuremakemake install

那么我应该把它作为install()函数内的第一条语句吗?还是我需要一个if-else条件?

0 投票
2 回答
362 浏览

c - 关于子进程中的 SIGINT

我正在写一个shell,现在它来控制子进程。当我signal (SIGTERM, SIG_DFL);在子进程中使用时,

信号 SIGINT 由 Ctrl + C 生成,该信号终止整个 OS shell。

我怎样才能只终止进程,例如“cat”,而不是整个 shell?我应该使用类似的东西:

真的感谢一个插槽。

0 投票
2 回答
334 浏览

linux - SIGINT 信号在 linux 中重新安装

我正在编写一个处理 Linux 信号的程序。更具体地说,我想在子进程中重新安装信号 SIGINT,却发现它不起作用。

这是我的代码的更简单版本:

当 shell 打印“在子进程中:”时,我按 ctrl+c。我发现该函数handler执行没有问题,但handler2从未执行。

你能帮我解决我代码中的这个错误吗?

更新:我希望子进程在foo运行过程中接收 SIGINT 信号,这可能吗?

0 投票
2 回答
373 浏览

ruby - Ctrl+C 不会杀死 Sinatra + EM::WebSocket 服务器

我正在构建一个运行 EM::WebSocket 服务器和 Sinatra 服务器的 Ruby 应用程序。就个人而言,我相信这两者都具备处理 SIGINT 的能力。但是,当在同一个应用程序中同时运行两者时,当我按下 Ctrl+C 时应用程序会继续运行。我的假设是其中一个正在捕获 SIGINT,阻止另一个也捕获它。不过,我不确定如何修复它。

简而言之,代码如下: