问题标签 [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.
python - Python:捕捉 Ctrl-C 命令。提示“真的要退出(y/n)”,否则继续执行
我有一个可能执行时间很长的程序。在主模块中,我有以下内容:
这工作正常,但我希望有可能在捕获 SIGINT 时暂停执行,提示用户是否真的想退出,如果他们决定不想退出,则恢复我在 run_program() 中停止的地方。
我能想到的唯一方法是在一个单独的线程中运行程序,让主线程等待它并准备好捕获 SIGINT。如果用户想退出主线程,可以进行清理并杀死子线程。
有没有更简单的方法?
c - 为什么这段代码没有按预期工作?
我最近开始使用信号进行编程。我在 C 中的多线程服务器代码中使用了它们。这是与信号相关的代码部分,但它不能正常工作:
信号处理程序:
}
Main() 内部:
我在这里阅读了这个方法。我尝试kill -s SIGINT <pid of my program>
从不同的终端窗口发送,但程序退出。
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
再次调用。这将防止任何未来的查询失败,但它仍然会产生当前查询中止的效果。
谢谢克里斯
linux - qemu 中的 control+c 信号
谁能帮我理解 qemu 如何处理 control+c 信号?在哪个文件中?(或一些有用的链接来理解它)我想制作路线(如调用图)。实际上,此信号不适用于我的 mips 客人(但在同一主机的马耳他 mips 上工作)谢谢,
主机和来宾操作系统:Linux 来宾架构:Mips64 主机架构:x86 QEMU 版本:qemu-1.0.1
linux - 控制+c 不工作
我正在使用具有 MIPS 架构的 linux 2.6.32.13-Cavium-Octeon。当我按 ctrl+c 终止进程时,在终端上;什么都没发生。如何在我的内核中跟踪它以处理它的问题?
stty -a
输出是:
tty有什么问题吗?因为当我make menuconfig
没有“启用 tty”选项并且命令bind -v
也不起作用时。
谢谢
linux - 如何使用“ctrl c”杀死所有进程?
我有一个从 C++ 代码编译的 exe 文件。而我使用bash搭建Linux环境并调用这个.exe
程序。
现在谈到问题,大多数时候,用户希望ctrlc在完成使用程序或不想继续时使用来杀死进程。
bash 进程被ctrlc正确终止,但是,.exe
它通常在没有被杀死的情况下运行。所以用户需要使用kill -9 xxx
杀死进程。如果他们忘记杀死,他们的 CPU 可能会被完全占用。
我该如何着手解决这个问题?我应该为 exe 文件的代码或 bash 脚本做点什么吗?
谢谢
linux - 在bash中捕获键盘中断
我在 bash 中有一个函数可以捕获键盘中断。该函数如下所示:
现在,在同一个脚本中,我有另一个名为的函数,它使用标准, ,进程install()
一个接一个地从源代码安装几个包。这个想法是在一个接一个地运行 3 个安装时捕获用户中断。问题是,我在哪里放置以下语句:./configure
make
make install
那么我应该把它作为install()
函数内的第一条语句吗?还是我需要一个if-else
条件?
c - 关于子进程中的 SIGINT
我正在写一个shell,现在它来控制子进程。当我signal (SIGTERM, SIG_DFL);
在子进程中使用时,
信号 SIGINT 由 Ctrl + C 生成,该信号终止整个 OS shell。
我怎样才能只终止进程,例如“cat”,而不是整个 shell?我应该使用类似的东西:
真的感谢一个插槽。
linux - SIGINT 信号在 linux 中重新安装
我正在编写一个处理 Linux 信号的程序。更具体地说,我想在子进程中重新安装信号 SIGINT,却发现它不起作用。
这是我的代码的更简单版本:
当 shell 打印“在子进程中:”时,我按 ctrl+c。我发现该函数handler
执行没有问题,但handler2
从未执行。
你能帮我解决我代码中的这个错误吗?
更新:我希望子进程在foo
运行过程中接收 SIGINT 信号,这可能吗?
ruby - Ctrl+C 不会杀死 Sinatra + EM::WebSocket 服务器
我正在构建一个运行 EM::WebSocket 服务器和 Sinatra 服务器的 Ruby 应用程序。就个人而言,我相信这两者都具备处理 SIGINT 的能力。但是,当在同一个应用程序中同时运行两者时,当我按下 Ctrl+C 时应用程序会继续运行。我的假设是其中一个正在捕获 SIGINT,阻止另一个也捕获它。不过,我不确定如何修复它。
简而言之,代码如下: