我(过去)编写了跨平台(Windows/Unix)应用程序,当从命令行启动时,处理用户键入的Ctrl-C以相同的方式组合(即干净地终止应用程序)。是否有可能在Windows上从另一个(不相关的)进程发送一个Ctrl-C/SIGINT/等同于一个进程来请求它干净地终止(给它整理资源等的机会)? 最佳答案 我围绕这个主题做了一些研究,结果比我预期的更受欢迎。KindDragon的回复是关键点之一。我写了一个longerblogpost关于这个主题并创建了一个工作演示程序,它演示了使用这种类型的系统以几种不错的方式关闭命令行应用程序。该帖
如何在Swift中正确捕获SIGINT和SIGTERM等不同的信号?例如,当人们通过按Control-C停止我的脚本时,我想在终止它之前做一些清理工作。 最佳答案 DispatchSources可用于监视UNIX信号。这是一个简单的例子,一个Swift3翻译的C代码"MonitoringSignals"并发编程指南中的部分。importDispatch//orFoundationsignal(SIGINT,SIG_IGN)////Makesurethesignaldoesnotterminatetheapplication.lets
我想从bash脚本启动后台Python作业,然后使用SIGINT优雅地终止它。这在shell中工作正常,但我似乎无法让它在脚本中工作。循环.py:#!/usr/bin/envpythonif__name__=="__main__":try:print'startingloop'whileTrue:passexceptKeyboardInterrupt:print'quittingloop'我可以从shell中断它:$pythonloop.py&[1]15420startingloop$kill-SIGINT15420quittingloop[1]+Donepythonloop.py杀死
当使用模块线程和类Thread()时,我无法捕获SIGINT(Ctrl+C在控制台中)无法被捕获。为什么以及我能做什么?简单的测试程序:#!/usr/bin/envpythonimportthreadingdeftest(suffix):whileTrue:print"test",suffixdefmain():foriin(1,2,3,4,5):threading.Thread(target=test,args=(i,)).start()if__name__=="__main__":main()当我按下Ctrl+C时,没有任何反应。 最佳答案
当我在我的Golang服务上kill-SIGINTpid时,我在调用profile.Stop时正常关闭,但在调用它之前我收到了这条消息:profile:捕获中断,停止profiles我什至无法调用profile.Stop因为它触发得更快,但是grpclisten和couchbase连接关闭工作正常。无论如何我可以覆盖这个故障配置文件停止吗? 最佳答案 有一个profile.NoShutdownHook该函数控制分析包是否应该HookSIGINT,在其上干净地编写分析文件。您可以使用/传递上述函数作为profile.Start()的选
当我在我的Golang服务上kill-SIGINTpid时,我在调用profile.Stop时正常关闭,但在调用它之前我收到了这条消息:profile:捕获中断,停止profiles我什至无法调用profile.Stop因为它触发得更快,但是grpclisten和couchbase连接关闭工作正常。无论如何我可以覆盖这个故障配置文件停止吗? 最佳答案 有一个profile.NoShutdownHook该函数控制分析包是否应该HookSIGINT,在其上干净地编写分析文件。您可以使用/传递上述函数作为profile.Start()的选
我注意到即使中断调用已通过signal.Notify拦截,以exec.Command启动的进程也会被中断。我做了以下示例来说明问题:packagemainimport("log""os""os/exec""os/signal""syscall")funcsleep(){log.Println("Sleepstart")cmd:=exec.Command("sleep","60")cmd.Run()log.Println("Sleepstop")}funcmain(){vardoneChannel=make(chanbool)gosleep()c:=make(chanos.Signal,
我注意到即使中断调用已通过signal.Notify拦截,以exec.Command启动的进程也会被中断。我做了以下示例来说明问题:packagemainimport("log""os""os/exec""os/signal""syscall")funcsleep(){log.Println("Sleepstart")cmd:=exec.Command("sleep","60")cmd.Run()log.Println("Sleepstop")}funcmain(){vardoneChannel=make(chanbool)gosleep()c:=make(chanos.Signal,
在等待来自操作read-sp的输入时按Ctrl-C将操作返回到命令行,但给定的输入被隐藏,就像它仍在运行read-s一样。例子#!/bin/shsig_handler(){echo"SIGINTreceived"exit1}trap"sig_handler"SIGINTread-sp"ENTERPASSWORD:"passwordechoecho$password通常执行如下:$~./example.shENTERPASSWORD:password$~text-bash:text:commandnotfound但如果您在输入密码时按Ctrl-C,您会得到$~./example.shEN
在等待来自操作read-sp的输入时按Ctrl-C将操作返回到命令行,但给定的输入被隐藏,就像它仍在运行read-s一样。例子#!/bin/shsig_handler(){echo"SIGINTreceived"exit1}trap"sig_handler"SIGINTread-sp"ENTERPASSWORD:"passwordechoecho$password通常执行如下:$~./example.shENTERPASSWORD:password$~text-bash:text:commandnotfound但如果您在输入密码时按Ctrl-C,您会得到$~./example.shEN