标签: sigterm

Win32 API模拟发送/捕获SIGTERM

在POSIX OS下,有一个信号API,它允许发送一个信号进行处理以使用kill来关闭它,你可以用sigaction捕获它并做你需要的事情;

但是,Win32不是POSIX系统,因此:

  • 如何处理可能出现的关闭事件,例如"任务管理器"中的"结束进程"?
  • 将关闭信号发送到Win32应用程序的标准API是什么?

我不是在谈论GUI,我在谈论应该很好地关闭的TCP/IP服务器.这不像Windows服务那样运行.

windows winapi posix shutdown sigterm

12
推荐指数
2
解决办法
2万
查看次数

捕获SIGTERM与捕获SIGINT

在Node.js服务器中,捕获SIGTERM与捕获SIGINT之间有什么区别吗?

我认为进程不应该能够阻止SIGINT的关闭?

  process.once('SIGINT', function (code) {
    console.log('SIGINT received...');
    server.close();
  });

 // vs.

  process.once('SIGTERM', function (code) {
    console.log('SIGTERM received...');
    server.close();
  });
Run Code Online (Sandbox Code Playgroud)

我能够捕获两个信号并阻止退出吗?我的实验表明答案是肯定的,但从我读过的内容来看,SIGINT总是假设关闭一个进程.

或者我可能会把SIGINT与SIGKILL混淆?也许SIGKILL是我无法恢复的信号?

捕获这些信号当然可以让我优雅地关闭:

server.once('close', function(){
    // do some other stuff
    process.exit(2); // or whatever code pertains
});
Run Code Online (Sandbox Code Playgroud)

我想SIGINT与SIGKILL混淆了 -

如果我尝试这样做:

 process.once('SIGKILL', function (code) {
    console.log('SIGKILL received...');
    exitCode = code || 2;
    server.close();
  });
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

 internal/process.js:206
        throw errnoException(err, 'uv_signal_start');
        ^
    Error: uv_signal_start EINVAL
        at exports._errnoException (util.js:1022:11)
        at process.<anonymous> (internal/process.js:206:15)
        at emitTwo (events.js:106:13)
        at process.emit (events.js:191:7)
        at _addListener (events.js:226:14)
        at process.addListener (events.js:275:10) …
Run Code Online (Sandbox Code Playgroud)

sigint node.js sigterm

11
推荐指数
2
解决办法
1万
查看次数

如何摆脱SIGTERM错误

我一直在新的xcode4上工作这个iPhone应用程序.实际上每次我在模拟器中退出我的应用程序时,我在main.m中的代码行上出现错误这是我的代码行,然后是下一行的错误

int retVal = UIApplicationMain(argc,argv,nil,nil);

线程1:编程接收信号:"SIGTERM".

这里发生了什么?我该如何解决?

iphone program-entry-point sigterm xcode4

10
推荐指数
1
解决办法
5349
查看次数

如何优雅地关闭(SIGTERM)Apollo Server 实例?

可以使用 终止实际的 HTTP 服务器实例server.close(callback),但我不确定任何挂起的 WebSocket 操作(通过 WebSocket 运行的突变或查询)会发生什么。由于 http.Server 对 WebSocket 操作一无所知,它可能会忽略它们。如何正确确保当收到 SIGTERM 时,服务器停止接受新请求/webSocket 连接,完成挂起的连接然后关闭?

用谷歌找不到任何关于此的信息。

node.js sigterm express apollo

10
推荐指数
1
解决办法
475
查看次数

Linux:从kill命令获取退出代码

如果我SIGTERM使用该kill命令向进程发送信号,我期望退出代码,但在终止进程后运行以下命令时总是得到0(零):

echo $?
Run Code Online (Sandbox Code Playgroud)

根据这篇文章中的答案,我在发送SIGTERM一个进程时应该得到143 :始终应用Java结束"退出143"Ubuntu

但我没有得到退出代码.为什么?

linux kill exit-code sigterm

9
推荐指数
1
解决办法
1万
查看次数

如何在RSpec中测试信号处理,特别是处理SIGTERM?

Heroku可能出于各种原因向您的应用程序发送SIGTERM,因此我创建了一个处理程序来处理一些清理,以防万一.一些谷歌搜索没有得到任何关于如何在RSpec中测试这个的答案或例子.这是基本代码:

Signal.trap('TERM') do  
    cleanup  
end

def cleanup
    puts "doing some cleanup stuff"
    ...
    exit
end
Run Code Online (Sandbox Code Playgroud)

测试程序收到SIGTERM时调用此清理方法的最佳方法是什么?

ruby unit-testing signals rspec sigterm

9
推荐指数
1
解决办法
1174
查看次数

在NodeJS工作器重新启动Heroku之后恢复排队的作业

所以我在Heroku上有一个相当简单的设置.我正在使用RabbitMQ来处理后台工作.我的设置包含一个每天使用Heroku Scheduler插件运行的节点脚本.脚本将作业添加到队列中,工作者依次使用它们并将它们委托给单独的模块进行处理.

在我重新启动实例之前收到Heroku不时随机启动的SIGTERM事件后,问题就开始了.

出于某种原因,在重新启动实例后,工作人员永远不会再次恢复.只有当我手动重新启动它通过执行heroku ps:scale worker=0heroku ps:scale worker=1工人继续消耗暂挂作业.

这是我的工人:

// worker.js
var throng = require('throng');
var jackrabbit = require('jackrabbit');
var logger = require('logfmt');
var syncService = require('./syncService');

var start = function () {
    var queue = jackrabbit(process.env.RABBITMQ_BIGWIG_RX_URL || 'amqp://localhost');

    logger.log({type: 'msg', msg: 'start', service: 'worker'});

     queue
        .default()
        .on('drain', onDrain)
        .queue({name: 'syncUsers'})
        .consume(onMessage)

    function onMessage(data, ack, nack) {

        var promise;
        switch (data.type) {
            case 'updateUser':
                promise = …
Run Code Online (Sandbox Code Playgroud)

jobs heroku rabbitmq node.js sigterm

9
推荐指数
1
解决办法
314
查看次数

SIGKILL前多少时间

在发送SIGKILL之前,我试图弄清楚在接收SIGTERM时应用程序退出了多少时间?

我对这些信号的了解非常少.我已经在Stackoverflow的建议答案中阅读了一些内容,但我无法一瞥"大约"过程在SIGTERminated之前可以存活多长时间.

编辑:比方说我创建了一个故意阻止操作系统关闭的问题(也许是while(1)可以做到的?)

我正在寻找一个没有MMI的进程的答案,在一个标准的Linux发行版上,比如一个内核3.x的Ubuntu.

我的猜测是没有等待时间.如果该过程消失,系统会给它时间来释放其资源.否则,系统会杀死它.

linux sigterm

8
推荐指数
1
解决办法
2847
查看次数

SonarQube退出143

我正在尝试在具有6GB RAM的Centos 6 VM上安装SonarQube。该过程始终以143退出。

经过分析,我发现JVM正在发送SIGTERM信号并因此退出。没有核心转储,并且dmesg也完全没有帮助。我也尝试摆弄内存选项无济于事。

如果有人可以帮助我调试此问题,它将非常有用。至少,我会对为什么终止该软件有所了解。

jvm 1    | 2018.03.06 15:32:59 INFO  app[][o.e.p.PluginsService] no modules loaded
jvm 1    | 2018.03.06 15:32:59 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
jvm 1    | 2018.03.06 15:33:07 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
jvm 1    | 2018.03.06 15:33:07 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/home/sonar/sonar/sonarqube-7.0]: /opt/jdk1.8.0_161/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/home/sonar/sonar/sonarqube-7.0/temp -Xrs -Xmx4g -Xms4g -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/home/sonar/sonar/sonarqube-7.0/lib/jdbc/mysql/mysql-connector-java-5.1.42.jar org.sonar.server.app.WebServer /home/sonar/sonar/sonarqube-7.0/temp/sq-process3024208901604150849properties
jvm 1    | 2018.03.06 15:33:12 INFO  app[][o.s.a.SchedulerImpl] Process [web] is stopped
jvm 1    | 2018.03.06 15:33:12 INFO  app[][o.s.a.SchedulerImpl] Process …
Run Code Online (Sandbox Code Playgroud)

sigterm centos6 sonarqube

8
推荐指数
1
解决办法
9127
查看次数

用于生成进程的shell脚本,在SIGTERM上终止子进程

我想编写一个shell脚本,在后台生成几个长时间运行的进程,然后挂起.收到SIGTERM后,我希望所有子进程也终止.

基本上,我想要一个"主过程".

这是我到目前为止所得到的:

#!/bin/sh

sleep 600 &
PID1="$!"

sleep 600 &
PID2="$!"

# supposedly this should kill the child processes on SIGTERM. 
trap "kill $PID1 $PID2" SIGTERM 

wait
Run Code Online (Sandbox Code Playgroud)

上面的脚本失败了trap: 10: SIGTERM: bad trap.

编辑:我正在使用Ubuntu 9.04

bash scripting sh long-running-processes sigterm

7
推荐指数
2
解决办法
2万
查看次数