我得到了我朋友发给我的这个程序。并且都是 ubuntu 的新手,她问我如果我们在终端上输入 ctrl-c 会发生什么
#include <signal.h>
#include <stdio.h>
void catch(int signo) {
printf("Signal %d caught\n", signo);
sleep(2);
}
int main() {
int i;
struct sigaction act;
act.sa_flags = 0;
act.sa_handler = catch;
sigfillset(&(act.sa_mask));
if (sigaction(SIGINT, &act, NULL) != 0) {
perror("sigaction");
exit(1);
}
for (i = 0; i < 100; ++i) {
printf("sleep %d ....\n", i);
sleep(1);
}
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
将会发生的事情是:
SIGINT(中断)信号2给您的catch函数,该函数将打印Signal 2 caught例如
sleep 0 ....
sleep 1 ....
sleep 2 ....
sleep 3 ....
sleep 4 ....
^CSignal 2 caught
sleep 5 ....
sleep 6 ....
sleep 7 ....
Run Code Online (Sandbox Code Playgroud)
您将能够通过发送SIGKILL信号来终止程序,例如通过暂停进程使用CtrlZ然后键入pkill myprog(其中myprog是您编译的代码的可执行版本的名称)。
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
Run Code Online (Sandbox Code Playgroud)
有关man 7 signal信号和信号处理的更多信息,请参见。
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |