jjzjj

python - 使用 KeyboardInterrupt 异常捕获 SIGINT 在终端中有效,而不是在脚本中有效

我试图在Python2.7程序中捕获SIGINT(或键盘中断)。这是我的Python测试脚本test的样子:#!/usr/bin/pythonimporttimetry:time.sleep(100)exceptKeyboardInterrupt:passexcept:print"error"接下来我有一个shell脚本test.sh:./test&pid=$!sleep1kill-s2$pid当我使用bash、sh或其他东西运行脚本时bashtest.sh,Python进程test保持运行并且不能被SIGINT杀死。而当我复制test.sh命令并将其粘贴到(bash)终端时,Pyth

c# - 如何在 C# 控制台应用程序中捕获 Ctrl+C (SIGINT)?

我希望能够在C#控制台应用程序中捕获Ctrl+C以便我可以在退出前执行一些清理工作。这样做的最佳方法是什么? 最佳答案 Console.CancelKeyPress事件用于此。这是它的用法:publicstaticvoidMain(string[]args){Console.CancelKeyPress+=delegate{//callmethodstocleanup};while(true){}}当用户按下Ctrl+C时,委托(delegate)中的代码运行,程序退出。这允许您通过调用必要的方法来执行清理。注意委托(delegat

process - golang 重新启动的父进程没有收到 SIGINT

我正在编写一个小程序来管理其他进程的重启。基本上,当应用程序进程启动时(称为A),它会生成一个新进程(称为D),该进程具有一个简单的HTTP服务器。当D收到http请求时,它会杀死A并重新启动它。问题是,A现在不响应CTRL-C,我不确定为什么。这可能是一些简单的事情,也可能是我不太了解进程、终端和信号之间的关系。但它在具有相同标准输入/标准输出/标准错误的同一终端中运行。下面是演示此行为的完整程序。packagemainimport("flag""log""net/http""os""os/exec""strconv""time")/*Runningthisprogramstarts

go - 在 Go 中收到 SIGINT 时是否调用延迟函数?

对于下面的代码片段,在收到^C时不会进行延迟调用。清理是否有可能引入竞争条件?如果是,什么是接收中断时更好的清理模式?funcfn(){//somecodedefercleanup()gofunc(){c:=make(chanos.Signal,1)signal.Notify(c,os.Interrupt)//Blockuntilasignalisreceived._= 最佳答案 请注意,如果您使用signal.Notify()“安装”您的信号channel,默认行为将被禁用。这意味着如果您这样做,fn()函数中的for循环将不会被

linux - 使用 Ctrl-C (SIGINT) 在 Perl 中使用系统命令打破 while 循环?

考虑以下示例,test.pl:#!/usr/bin/envperluse5.10.1;usewarnings;usestrict;$SIG{'INT'}=sub{print"CaughtCtrl-C-Exit!\n";exit1;};$|=1;#turnoffoutputlinebufferinguseGetopt::Long;my$doSystemLoop=0;GetOptions("dosysloop"=>\$doSystemLoop);print("$0:doSystemLoopis:$doSystemLoop(use".(($doSystemLoop)?"system":"Pe

linux - 如何通过 SSH(不带 -t 选项)将 SIGINT (Ctrl-C) 发送到当前远程进程

我需要在SSHsession中向在前台运行的远程进程发送SIGINT。SSHsession已经建立,所以我不能使用启动它的选项(如HowtosendSIGINTtoaremoteprocessoverSSH?中所述)ssh-tuser@host我知道我可以打开第二个sshsession并终止进程或关闭当前的sshsession,但我想避免这种情况并直接抛出当前session(如果可能的话)。 最佳答案 如果您使用ssh在远程系统上启动一个没有PTY的进程,那么据我所知,没有办法通过该sshsession向远程进程发送信号。SSH协议

node.js - NodeJS 子进程在 SIGINT 上终止

我正在创建NodeJS应用程序,它创建了很多子进程。它们由spawn和exec启动(基于lib实现)。一些示例可能是用于图像处理的GraphicsMagick(gm)或用于OCR的Tesseract(node-tesseract)。现在我想优雅地结束我的应用程序,所以我创建了关闭钩子(Hook):functionexitHandler(){killer.waitForShutdown().then(function(){logger.logInfo("Exitedsuccessfully.");process.exit();}).catch(function(err){logger.l

linux - 防止 bash 脚本在处​​理 SIGINT 后终止

我正在为一个应用程序编写一个bash包装器。该包装器负责更改用户、运行软件并记录其输出。我还希望它传播SIGINT信号。到目前为止,这是我的代码:#!/bin/bashset-e;set-ufunctionchild_of{ps--ppid$1-o"pid"--no-headers|head-n1}functionhandle_int{echo"ReceivedSIGINT"kill-int$(child_of$SU_PID)}sumyuser-p-c"bash/opt/loop.sh2>&1|tee-i>(logger-tmytag)"&SU_PID=$!trap"handle_in

ruby - Thin 不响应 SIGINT 或 SIGTERM

bundleexecthinstart-p3111给出以下输出:UsingrackadapterThinwebserver(v1.2.11codenameBat-ShitCrazy)Maximumconnectionssetto1024Listeningon0.0.0.0:3111,CTRL+Ctostop^CCtrl-C不执行任何操作(SIGINT)。也不会kill(SIGTERM)。我找到了一些关于此行为的引用资料,但没有找到解决方案。问题似乎出在eventmachine(与最新的thin捆绑在一起)、ruby1.9.2-r290或linux内核(Ubuntu10.4LTS、2.6

python - 在 python 中将 SIGINT 发送到 os.system

我正在尝试使用os.system()在python中运行Linux命令strace-c./client。当我按下Ctrl+C时,我在终端上得到了一些输出。我必须在一分钟后以编程方式发送“进程正确停止”信号,并希望在文件中按Ctrl+C后生成的终端输出。伪脚本将非常有用。如果我使用subprocess.Popen然后从键盘发送Ctrl+C信号我没有在终端上得到输出,所以必须使用操作系统系统 最佳答案 在Python中,您可以使用os.kill以编程方式发送Ctrl+C信号.问题是,您需要将接收信号的进程的pid,而os.system不