Articles of 信号

closures控制台时如何正确处理SIGBREAK?

我必须捕捉控制台事件closuresbutton上的点击 ,这与ctrl-break事件SIGBREAK相对应,但显然有一种超时,它不允许我做超过5秒的任何事情,在程序似乎中止之后所以消息“正确结束!”将永远不会发生)。 如何强制系统执行closures操作直至结束(或将超时延长至60秒)? 注意:使用相同的方法,我可以使用fflush(stdout);成功处理CTRL + C事件( SIGINT fflush(stdout); 在doStuffs();之前doStuffs(); 注2:我的代码是基于这个答案: https : //stackoverflow.com/a/181594/1529139 #include <csignal> void foo(int sig) { signal(sig, foo); // (reset for next signal) // do stuffs which takes aboutly 15 seconds doStuffs(); cout << "Properly ended !"; } int main(DWORD argc, LPWSTR *argv) { signal(SIGBREAK, foo); myProgramLoop(); }

在Linux上以相反顺序接收的实时信号

这个程序发送实时信号给自己并处理它们。 一旦处理完毕,它将按照收到的顺序输出它收到的信号。 $ cat realtime.c #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int received_signals[10]; int received_signals_value[10]; int received_signals_count = 0; void real_time_handler(int sig_number, siginfo_t * info, void * arg __attribute__ ((unused))) { received_signals[received_signals_count] = sig_number – SIGRTMIN; received_signals_value[received_signals_count] = info->si_value.sival_int; ++received_signals_count; } void send_real_time_signal(int sig_number, int value) { union sigval sig_value; printf("Sending signal SIRTMIN+%d, […]

Ubuntu的Linux Git GC说错误:未能运行重新包装

我正在阅读其他类似标题的线程,但似乎与我无关。 我有一个在我的本地ubuntu框git回购。 我有的文件是mysql转储我分裂成每个2MB文件。 当我git,这是输出: git@pc:~/repos/x$ git gc Counting objects: 17244, done. Delta compression using up to 4 threads. Killedssing objects: 90% (2491/2767) error: failed to run repack 有没有一种方法来追踪造成什么? 我已经尝试过了 git config –global pack.windowMemory "20m" git config –global pack.packSizeLimit "20m" git config –global pack.threads "1" 但是这是输出 git@pc:~/repos/x$ git gc Counting objects: 17244, done. Killedssing objects: 3% […]

什么键盘信号除了Ctrl-C可以捕捉?

我有一个(C,Linux)应用程序,通过closures来处理Ctrl-C SIGINT。 我想添加另一个信号处理程序,以便我可以使用另一个按键组合“运行时重新加载configuration”。 所以我正在寻找一个信号,我可以通过按键发送到前台进程,这不会强制进程退出或暂停。 还有别的吗?

非阻塞信号传输需要多长时间?

当一个进程向另一个进程发送信号时,接收进程在什么情况下等待,直到它被重新安排运行? 在什么情况下安装的信号处理程序立即被调用? 提升信号的过程会产生多less开销,而不是直接调用相应的信号处理程序?

信号SIGFPE问题

我是Linux新手,请帮忙。 以下代码在Linux 2.6 gcc中运行时获得核心转储。 $ ./a.out 浮点exception(核心转储) 问题: 1.由于安装了过程信号掩码,因此不应该禁止第40行(z = x / y)生成的“SIGFPGE” 2.如果未被阻止,由于已经安装了一个信号处理程序,不应该由信号处理程序捕获“SIGFPE”,而不是核心转储? 3.如果我将第40行(z = x / y)注释掉,并使用第42行(raise(SIGFPE)),那么所有事情都按我的预期工作。 这里有什么区别x / 0和提高SIGFPE? 这里是代码: #include <stdio.h> #include <stdlib.h> #include <signal.h> void sig_handler(int signum) { printf("sig_handler() received signal %d\n", signum); } int main(int argc, char * argv[]) { // setup signal mask, block all signals sigset_t set; […]

发送信号到后台进程

我应该将哪个信号发送到后台进程以将其移至前台? SIGTTIN,SIGTOU还是…?

C ++,linux,fork,execvp,waitpid和SIGTSP

我正在实施一个家庭工作terminal。 我差不多完成了,我只需要实现一个bg(Background)和一个fg(Foreground)命令。 我的代码如下所示: void run(){ string command[] = parseMyInput( getInput() ); int fork_result = fork(); if( -1 == fork_result ) //handle error else if( 0 == fork_result ){ // child setpgrp(); // I don't want the children to get the signals if( -1 == execvp( command[0], makeArgs(command) ) ) //handle error } else { // […]

在Linux中使用Signal发送信息

当从一个进程发送信号到另一个进程时,我也想发送一个longtypes的值。 那可能吗? 我正在使用SIGUSR1。

为什么shell在后台进程中忽略SIGINT和SIGQUIT?

如果我在脚本或-c片段中背景进程,后台进程将忽略SIGINT和SIGQUIT: 例: $ alias ps='ps -o pid,ppid,pgrp,sid,stat,tty,ignored,blocked,caught,wchan,min_flt,pmem,args –forest' $ sh -c 'sleep 1000 & sleep 1000 | sleep 1000' & \ sleep 0.01; ps |grep -v -e ps -e grep PID PPID PGRP SID STAT TT IGNORED BLOCKED CAUGHT WCHAN MINFL %MEM COMMAND 6197 2143 6197 6197 Ss pts/28 0000000000380004 0000000000010000 000000004b817efb wait 10039 0.0 […]