Articles of 信号

configurationNGINX /清漆使用SignalR websockets?

我正在使用NGINX卸载SSL,然后使用清漆来从IIS8负载平衡/caching响应。 ie ssl -> nginx -> varnish -> iis8 这完美的作品。 SignalR使用长轮询工作正常 – 我所有的超时等都正确configuration。 现在我试图让SignalR和websockets使用这个configuration; 没有成功。 为了简化事情,我尝试了以下两个设置: nginx – > iis8( 使用这些设置 ) 清漆 – > iis8( 使用这些设置 ) 这些都不起作用。 我一直在Chrome中遇到这个错误: 与'ws:// xxxxxxxx'的WebSocket连接失败:意外的响应代码:500 这从IIS: System.InvalidOperationException: Not a valid web socket request. at Microsoft.AspNet.SignalR.Owin.ServerRequest.AcceptWebSocketRequest(Func`2 callback) at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context) at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary`2 environment) at Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBasehttpContext, AsyncCallback callback, […]

timer_getoverrun()在使用sleep()时的行为不像预期的那样

这里是一个程序,它和sleep()子程序一起使用POSIX per-process定时器。 定时器到期时发送的信号已被设置为SIGUSR1而不是SIGALRM ,因为SIGALRM可能在sleep()内部使用,但似乎仍然不起作用。 我使用命令行timer-overruns -d 1 -n 10000000 (1 cs间隔)来运行程序,理论上,我们应该在对sigwaitinfo()调用之间预计有100次sigwaitinfo() 。 但是, timer_getoverrun()返回0。 我也尝试过使用一个耗时for循环来引入延迟的版本。 在这种情况下,超限被logging下来。 有谁知道为什么发生这种情况? 我正在运行一个3.4 Linux内核。 节目源 /* * timer-overruns.c */ #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <time.h> // Signal to be used for timer expirations #define TIMER_SIGNAL SIGUSR1 int main(int argc, char **argv) { int opt; int d […]

当使用信号捕捉叉时程序变得无限

嗨,每一个,而做一些实验使用叉子和信号,我遇到了一个程序,显示非常有趣的行为,但经过数小时的努力,我无法弄清楚发生了什么事情。 我想要做的是我在主体内创build一个subprocess,然后打印“你好世界”,然后调用退出。 在这之后,我们完全明白它的信号处理程序会被调用,并且等待系统调用阻塞的父进程也会被调用。 现在我正在信号处理程序中创build另一个进程,但是从那里开始,输出变得无限。 输出是这样的:Hello world来到Linux来到UNIX来到Linux来到UNIX来到Linux来到UNIX来… 另外为什么来到Linux打印一遍又一遍。 也请告诉我什么时候拨叫,我知道重复的地址空间是由父母,但信号处理程序呢? 他们也得到重复吗? 在我的情况下,当小孩叫退出。 然后被调用的信号处理程序是孩子或父母。 请帮忙。 谢谢。 void sig_handler(int signo) { if(fork() == 0){ } else{ int pid = 0; wait(&pid); printf("Come to unix"); fflush(stdout); } } int main() { if (signal(SIGCHLD, sig_handler) == SIG_ERR){ } int child_pid; int i; child_pid = fork(); switch (child_pid) { case -1: perror("fork"); […]

是否有一种阅读Linux上目录列表的asynchronous信号安全的方式?

SUSv4在其asynchronous信号安全函数列表中没有列出opendir,readdir,closedir等。 有没有一种安全的方法来从信号处理程序中读取目录列表? 例如是否有可能“打开”目录,并以某种方式sl出原始目录列表? 如果是这样的话,“读”返回什么样的数据结构? 或者,也许在Linux上,即使SUSv4 / POSIX不需要可以使用的某些系统调用也是asynchronous信号安全的。

发送信号从另一个非进程和日志堆栈的线程不发生

我试图发送信号到一个POSIX线程从另一个进程(不是从创build该线程的进程。我做了什么用kill发送信号(…):: int trap_handle(pid_t child_waited ) 69 { 70 printf("%s, new value: %d, child_waited=<%ld>\n", __func__,g_var_x, child_waited); 71 int errno_ = -1; 72 errno_ = kill(child_waited, SIGUSR1); 73 //syscall(SYS_tgkill, -1, child_waited, SIGUSR1); 74 //errno_ = pthread_kill(child_waited, SIGUSR1); 75 if(0==errno_) 76 printf("Signal sent to thread: %ld\n", child_waited); 77 else 78 printf("pthread_kill failed: error:%d", errno_); 79 } 而在注册SIGUSR1的线程中: 230 […]

在线程之间发送信号

我是multithreading新手。 线程之间传递信号有一个疑问。 我在一个线程中提高信号(比如线程1)。 我有一个函数(比如f1)在线程2中,我注册信号。 如果在线程1中产生一个信号,是否有可能从属于线程2的函数f1中退出?如果可能的话,请让我知道如何实现它。 我的操作系统是Linux和我正在使用ACE线程。 提前致谢

将sigaction重置为默认值

在Android中,仿生加载程序为statrtup上的每个进程设置一个默认的信号处理程序: void debugger_init() { struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_sigaction = debugger_signal_handler; act.sa_flags = SA_RESTART | SA_SIGINFO; sigemptyset(&act.sa_mask); sigaction(SIGILL, &act, NULL); sigaction(SIGABRT, &act, NULL); sigaction(SIGBUS, &act, NULL); sigaction(SIGFPE, &act, NULL); sigaction(SIGSEGV, &act, NULL); sigaction(SIGSTKFLT, &act, NULL); sigaction(SIGPIPE, &act, NULL); } 我想将其设置回它的默认值,这意味着我想忽略这些信号,并且默认处理程序将发生(CORE DUMP) 我如何恢复执行的操作? 我想忽略所有这些,就好像上面的函数从未被调用过一样

如何将SIGINT传递给孙子(以及如何以编程方式执行此操作)

使用linux / bash / python3,我创build了一个孙subprocesssleep 123 。 当我调用p.terminate() ,这会杀死subprocess(init接pipe孙子sleep 123 )。 不过,从python解释器我仍然可以按Ctrl + C来杀死孙子。 我的问题是:1)如果python解释器现在已经通过init初始化,那么它是如何发送一个SIGINT给grand-child的; 2)我是如何以编程方式杀死孙子的。 我已经尝试过p.send_signal(signal.SIGINT) ,玩stdin=PIPE等,但无法让它工作。 gnr@localhost: python3 Python 3.3.1 >>> from subprocess import PIPE, Popen >>> p = Popen(['bash', '-c', '(sleep 123)']) gnr@localhost: ps -AF | grep sleep gnr 5081 5078 0 26526 1168 6 14:03 pts/26 00:00:00 bash -c (sleep 123) […]

基于Unix的shell相对于退出subprocess的默认行为?

我正在实现一个基于Unix的基本shell。 shell维护一个在后台运行的subprocess列表,并停止进程。 如果退出shell: shell是否会杀死在后台运行/停止的所有subprocess? 要么 shell是否简单地忽略在后台或停止状态下存在的subprocess,只能在以后被init使用? 请注意,我需要知道Unix shell的确切行为。 我在这里find了答案,但仍然没有谈到Unix shell的确切实现。

我的信号处理程序有什么问题?

在过去几天我正在写一个程序,遇到了一些困难。 我只是想要一个程序来运行信号。 当用户点击控件c时,我创build了两个pipe道和一个拥有两个子项的父项。 当用户从一个subprocess中控制Z时,我希望孩子们互相交谈。 目前,我只是想要打印出一些线到terminal。 现在对这个问题做了一些testing之后,我总结了一些因素。 如果控制Z的信号放在父进程中(在代码中注释掉),程序运行正常。 如果信号然后移动到subprocess….它由于某种原因终止程序。 我认为这是孩子死亡,但是使用诸如睡眠和等待等命令certificate是无效的。 有人可以看到我要去哪里错了…它真的开始bug我:/ #include <stdio.h> #include <signal.h> #include <fcntl.h> #include <unistd.h> #include <time.h> #include <string.h> pid_t forkA, forkB; void handleSignal(); void controlC(); void controlZ(); int main () { signal(SIGINT, handleSignal); while(1); } void handleSignal (int signal) { if (signal == SIGINT) { write(1, "ContrlC \n", 11); controlC(); } […]