标签: sigint

将SIGINT发送到子进程

我正在尝试创建一个子进程,然后将SIGINT发送给子进程而不终止父进程.我试过这个:

pid=fork();
  if (!pid)
  {
      setpgrp();
      cout<<"waiting...\n";
      while(1);
  }
  else
      {
      cout<<"parent";
      wait(NULL);
      }
Run Code Online (Sandbox Code Playgroud)

但当我点击Cc时,两个过程都被终止了

c++ linux signals sigint

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

pthread_sigmask会干扰GDB

我一直致力于Linux下的多线程程序,对信号处理有特殊要求.例如,我需要程序打印单个Ctrl-C输入的统计信息.

我使用pthread_sigmask和sigwait来实现它,即我在创建其余线程之前阻止主线程中的所有非关键信号,并且我启动了在sigwait上阻塞的"捕获器"线程.

初始化(主要):

sigfillset(&set);
sigdelset(&set, SIGSEGV);
sigdelset(&set, SIGBUS);
sigdelset(&set, SIGILL);

s = pthread_sigmask(SIG_BLOCK, &set, NULL);
if (s != 0)
    handle_error_en(s, "pthread_sigmask");

s = pthread_create(&signal_thread, NULL, &sig_thread, (void *) &set);
if (s != 0)
    handle_error_en(s, "pthread_create");
Run Code Online (Sandbox Code Playgroud)

捕手线程例程:

void *sig_thread(void *arg) {
    sigset_t *set = (sigset_t *) arg;
    int s, sig;

    pthread_detach(pthread_self());

    for(;;) {
        s = sigwait(set, &sig);
        if (s != 0)
            handle_error_en(s, "sigwait");
        switch(sig) {
            case SIGINT:
                break;
            case SIGTERM:
                break;
            case SIGUSR1:
                break;
            case SIGUSR2:
                break;
            default:
                break;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c gdb signals pthreads sigint

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

在bash中,如何在不停止脚本的情况下捕获和处理SIGINT?

看起来像

trap on_sigint SIGINT
Run Code Online (Sandbox Code Playgroud)

一旦SIGINT被抓住就停止脚本.然后,on_sigint执行.是否可以在SIGINT不停止脚本的情况下处理?

bash signals sigint

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

优雅地关闭大猩猩服务器

我正在使用https://github.com/gorilla/mux中的 gorilla多路复用器库构建服务器.问题是,当我使用Ctrl + C或者有特定的API调用时,我希望它能够正常关闭,例如"/ shutdown".

我已经知道在Go 1.8中,已经实现了正常关闭.但是如何将它与大猩猩多路复用器结合起来呢?另外,如何将它与SIGINT信号结合起来?

谁能告诉我怎么做?

webserver channel go sigint gorilla

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

使用ganymed SSH2发送SIGINT CTRL-C?

我需要终止一个我已经开始使用 ganymed SSH2 的进程。具体来说,我想使用Ctrl+优雅地杀死它C。我已经看到了尝试发送 ASCII 的想法,\x03但是在使用 execCommand() 时它不会使用转义字符。如何通过ganymed发送Ctrl+ CSIGINT?

如果我应该使用另一个 Java SSH 应用程序,请告诉我,我已经研究了 Jsch、sshj,但发现 ganymed ssh2 是最简单的。

我试图杀死的程序是 tethereal (wireshark)

java ssh jsch sigint

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

在SIGINT上释放已分配内存的最佳实践

我有一个简单的程序,使用select和类似的东西多路复用IO.
为了中断"服务器"进程,我集成了一个对SIGINT做出反应的sig_handler .

每次分配内存时,contains方法都会执行free本身或调用方法.

使用valgrind显示,有一些分配没有被释放.
也许没有必要,但我想了解处理信号的最佳方法.按STRG + C
似乎free不会调用调用. 因此,使用中断条件退出循环将是毫无意义的,这是我的第一种方法.

在关闭整个程序之前,有没有可能清理所有东西?

感谢任何提示和建议.

c memory-management sigint

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

如何在SIGINT处理程序中清除本地数据

我需要在SIGINT处理程序中执行清理功能,但无法将本地数据传递给它。这里是一个例子:

int main(int argc, char *argv[]) {

    struct database *db = db_cursor();
    sockfd_t master_socket = init_server();

    signal(SIGINT, sigint_handler);

    while (1) {
        // accepting connections
    }
}

void sigint_handler(int s) {
    destroy_db(db);
    shutdown(master_socket, SHUT_RDWR);
    close(master_socket);
    exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

我该如何实施这种行为?我试过使此变量为全局变量,但无法在编译时调用此函数(错误:initializer元素不是编译时常量)。

c signals blocking sigint

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

Swift GCD:为什么信号处理程序在函数中不起作用

使用这个答案作为参考,我试图在我的 swift linux 脚本中实现一个信号处理程序,它将使程序保持活动状态直到 Ctrl-C,然后在收到 SIGINT 时运行一些清理。使用该答案中的代码在主函数中效果很好:

import Dispatch
import Foundation

signal(SIGINT, SIG_IGN) // // Make sure the signal does not terminate the application.

let sigintSrc = DispatchSource.makeSignalSource(signal: SIGINT, queue: .main)
sigintSrc.setEventHandler {
    print("Got SIGINT")
    // ...
    exit(0)
}
sigintSrc.resume()
dispatchMain()
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将信号处理程序移动到一个函数中,如下所示:

public func registerSigint() {
    signal(SIGINT, SIG_IGN)
    let sigintSrc = DispatchSource.makeSignalSource(signal: SIGINT, queue: .main)
    sigintSrc.setEventHandler {
        print("Got SIGINT")
        exit(0)
    }
    sigintSrc.resume()
}
Run Code Online (Sandbox Code Playgroud)

...

registerSigint()
dispatchMain()
Run Code Online (Sandbox Code Playgroud)

程序在 CTRL-C SIGINT 上无限期挂起。为什么这表现不同?

sigint grand-central-dispatch swift

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

在 SIGINT 上,Linux 上的退出代码为 130,Windows 上的退出代码为 2

为什么下面的空程序在 Linux 上以 130 退出CtrlC这是我怀疑的,因为我的 shellbash将 SIGINT 包装为 130 (128+2)。

在使用Git Bash ( )的 Windows 上git-bash.exe,我得到退出代码 2。

package main

func main() {
    for {

    }
}
Run Code Online (Sandbox Code Playgroud)

这是 Go 在 Windows 上的行为还是git-bash.exe?因为我2内部需要退出代码,所以我需要使用signal包来包装它吗?

exit-code go sigint

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

Node.js 中的默认 SIGINT?

我尝试搜索 Node.js 源代码,但找不到它。默认情况下,在以下示例中,我在哪里可以找到默认处理 SIGINT ( Ctrl+ )的 Node.js 代码:C

var http = require('http');

var server = http.createServer(function(req, res) {
  res.writeHead(200);
  res.end('Hello Http');
});


server.listen(5001);
Run Code Online (Sandbox Code Playgroud)

sigint node.js

0
推荐指数
1
解决办法
1627
查看次数