标签: sigterm

Thin不响应SIGINT或SIGTERM

bundle exec thin start -p 3111 给出以下输出:

使用机架适配器瘦Web服务器(v1.2.11代号Bat-Shit Crazy)最大连接数设置为1024听取0.0.0.0:3111,CTRL + C停止^ C

Ctrl-C不执行任何操作(SIGINT).也没有杀死(SIGTERM).

我发现了一些这种行为的引用,但没有解决方案.问题似乎是在eventmachine(捆绑了最新的thin),ruby 1.9.2-r290或linux内核(Ubuntu 10.4 LTS,2.6.38.3-linode32)中.

它发生在我的项目中,但不是一个全新的rails项目.

参考文献:

ruby linux thin sigint sigterm

5
推荐指数
1
解决办法
2421
查看次数

pcntl_wait 未被 SIGTERM 中断

根据pcntl_wait的 PHP 文档,

等待函数暂停当前进程的执行,直到子进程退出,或者直到传递了一个信号,其动作是终止当前进程或调用信号处理函数。

但是,当我运行以下代码并使用kill -s SIGTERM [pid]信号处理程序将 SIGTERM 发送到父进程时,仅子进程退出后才调用(即我必须等待睡眠完成。不pcntl_wait()应该被 SIGTERM 中断吗?

fork_test.php:

<?php
  declare(ticks = 1);

  function sig_handler($signo) {
    switch ($signo) {
      case SIGTERM:
        echo 'SIGTERM' . PHP_EOL;
        break;
      default:
    }
  }

  pcntl_signal(SIGTERM, 'sig_handler');

  $pid = pcntl_fork();

  if ($pid == -1) {
     die('could not fork');
  }
  else if ($pid) {
    echo 'parent' . PHP_EOL;

    pcntl_wait($status);
  }
  else {
    echo 'child' . PHP_EOL;
    sleep(30);
  }
?>
Run Code Online (Sandbox Code Playgroud)

输出(SIGTERM 仅在等待 30 秒后出现):

$ php …
Run Code Online (Sandbox Code Playgroud)

php sigterm pcntl

5
推荐指数
1
解决办法
1363
查看次数

SIGTERM 无法杀死进程

我有一个单线程进程,它不会因 kill -TERM 而死亡。进程信号掩码没有显示 SIGTERM 被阻塞。我正在以 root 身份执行 'kill'。我可以使用 SIGKILL 终止进程,但这是更大系统的一部分,我希望 SIGTERM 能够工作。

$ cat /proc/5105/status
Name:   task_root.nginx
State:  S (sleeping)
Tgid:   5105
Pid:    5105
PPid:   1
TracerPid:  0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 256
Groups: 4 24 27 30 46 109 124 1000 
VmPeak:  3304480 kB
VmSize:  3304472 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    249060 kB
VmRSS:       320 kB
VmData:  3228468 kB
VmStk:      1012 kB
VmExe:      3020 kB
VmLib:     30232 kB …
Run Code Online (Sandbox Code Playgroud)

signals kill sigkill sigterm

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

我可以在 R 中捕获信号吗?

在 bash 中,我可以捕获SIGINTSIGKILLSIGTERM等。这使我可以根据程序意外停止的方式做不同的事情。

有没有办法在R中做到这一点?

error-handling r sigint sigterm

5
推荐指数
1
解决办法
786
查看次数

hadoop datanodes使用SIGTERM 15保持关闭状态

我正在运行一个包含24台服务器的hadoop集群.它已运行了几个月,但在最后一次重启后,数据节点仍然因错误而死机:

2016-02-05 11:35:56,615 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.133:50010, dest: /192.168.0.133:40786, bytes: 118143861, op: HDFS_READ, cliID: DFSClient_attempt_1454667838939_0001_m_000330_0_-1595784897_1, offset: 0, srvID: 6522904d-0698-4794-af45-613a0492753c, blockid: BP-2025286576-192.168.0.93-1414492170010:blk_1076219758_2486790, duration: 21719288540
2016-02-05 11:35:56,755 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.133:50010, dest: /192.168.0.133:40784, bytes: 118297616, op: HDFS_READ, cliID: DFSClient_attempt_1454667838939_0001_m_000231_0_-1089799971_1, offset: 0, srvID: 6522904d-0698-4794-af45-613a0492753c, blockid: BP-2025286576-192.168.0.93-1414492170010:blk_1076221376_2488408, duration: 22149605332
2016-02-05 11:35:56,837 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.133:50010, dest: /192.168.0.133:40780, bytes: 118345914, op: HDFS_READ, cliID: DFSClient_attempt_1454667838939_0001_m_000208_0_-2005378882_1, offset: 0, srvID: 6522904d-0698-4794-af45-613a0492753c, blockid: BP-2025286576-192.168.0.93-1414492170010:blk_1076231364_2498422, duration: 22460210591
2016-02-05 11:35:57,359 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.133:50010, dest: /192.168.0.133:40781, bytes: 118419792, op: HDFS_READ, cliID: …
Run Code Online (Sandbox Code Playgroud)

hadoop sigterm

5
推荐指数
0
解决办法
1018
查看次数

npm 在 ctrl+c 上运行 poststop 脚本

我的package.json脚本部分看起来像这样。

"scripts": {
  "prestart": "mongod",
  "start": "NODE_ENV=prod node server.js",
  "poststop": "mongo admin --eval 'db.shutdownServer()'",
  "predev": "mongod",
  "dev": "NODE_ENV=dev nodemon server.js"
},
Run Code Online (Sandbox Code Playgroud)

我使用 pre- 和 post 钩子mongod在启动我的服务器之前启动。然后我使用ctrl+杀死我的服务器c。不幸的是,这不会执行poststop脚本。结果,npm/yarn start/dev第二次调用会抛出错误并中止,因为mongod已经在运行。

另一个 mongod 实例已经在 /data/db 目录上运行,正在终止

我可以以某种方式实现poststopctrl+ c

mongodb sigterm npm-scripts yarnpkg

5
推荐指数
1
解决办法
1270
查看次数

如何让 python 上下文管理器捕获 SIGINT 或 SIGTERM 信号

我使用上下文管理器流式传输数据以在程序退出时关闭连接。我在后台将我的程序作为守护进程运行。

当守护进程被 SIGINT 或 SIGTERM 或 kill 命令发送的任何中断信号中断时,如何让上下文管理器处理这种情况?

我在 Raspberry Pi 和 Ubuntu 上运行 Python 3。

更新

我已经看到了:如何在 Python 中捕获 SIGINT? 这很有帮助,但我不确定如何将它与 python 的上下文管理器一起使用?IE。假设我有一个作为上下文管理器构建的对象:

class Sensor:

    def __init__(self, name: str):
        self.name = name

    def __enter__(self):
        self._connect()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()
Run Code Online (Sandbox Code Playgroud)

我在作为守护程序运行的脚本中使用该对象。是否有一种 pythonic 方法来指定 __ exit__ 函数也必须在 SIGINT 和 SIGTERM 异常上调用?

对不起,如果没有正确理解异常和信号中断在 python 中是如何工作的,我的问题没有意义

python process sigint sigterm

5
推荐指数
1
解决办法
1026
查看次数

什么会导致 SIGTERM 不传播到子进程?

我在 Linux 上有一个进程,它通过 fork 启动 20 个子进程。当我杀死父进程时,它通常会杀死所有子进程,但有时它不会杀死所有子进程,并且会留下一些孤立进程。这不是启动时的竞争条件,这是在进程处于活动状态几分钟之后。

什么样的事情会导致 SIGTERM 无法正确传播到某些子进程?

linux fork sigterm

4
推荐指数
1
解决办法
4729
查看次数

应用程序未在发布模式下进入 Posix 信号处理程序

我正在尝试在 Linux Arm 设备上正常关闭我的控制台应用程序。发送的信号是SIGTERM我使用新的PosixSignalRegistration.Create()方法实现了 Posix Sgnal Handler 。当在调试模式下编译时,这可以完美地工作。但是,在发布模式(打开优化)下,永远不会进入处理程序。

这是一个 MRE:

using Microsoft.Extensions.Hosting;
using System.Runtime.InteropServices;

ManualResetEvent resetEvent = new(false);
CancellationTokenSource cts = new();

// Handles CTRL + C in both operating systems
Console.CancelKeyPress += (sender, eventArgs) =>
{
    Console.WriteLine("Received CTRL+C");
    resetEvent.Set();
    eventArgs.Cancel = true;
    cts.Cancel();
};

// Handles graceful kill (Sigterm) in linux (e.g. systemctl stop)
PosixSignalRegistration.Create(PosixSignal.SIGTERM, (context) =>
{
    Console.WriteLine("Received SIGTERM");
    resetEvent.Set();
    cts.Cancel();
});

IHost? host = null;

try
{
    var hostBuilder = Host.CreateDefaultBuilder(args);
    host = …
Run Code Online (Sandbox Code Playgroud)

c# compiler-optimization sigterm .net-core .net-6.0

4
推荐指数
1
解决办法
789
查看次数

使用 sigterm 杀死进程并在超时后升级到 sigkill

有没有办法 sigterm 超时的进程?如果该进程没有在 30 分钟内正常终止,则该进程应该得到 sigkill。理想情况下,这种正常关闭应该在后台执行。

bash sigkill sigterm

3
推荐指数
1
解决办法
2859
查看次数