单进程场景
在单进程的情况下,ctrl+c和kill -2是一模一样的,都是向指定的进程发送SIGINT信号.
如果进程中注册了捕捉SIGINT信号的处理函数,那么这个信号会被进程处理,例如:
void processB() {
// Set signal handler for SIGINT in process B
signal(SIGINT, sigint_handler);
printf("I am B process\n");
while (1) {
printf("B: Working...\n");
sleep(1);
}
}
如果没有注册这个信号捕捉,当信号触发时,操作系统将会终止这个进程的运行.相关资源也会由系统回收.
非单进程场景
试想一种场景,A进程作为父进程启动之后拉起子进程B。这个时候对A进程发送kill -2或者ctrl + c,这两种情况下,产生的结果是否一致?
我们可以写一个简单的测试程序来验证我们的想法:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sigint_handler(int signum) {
printf("Capture Ctrl+C signal:%d\n", signum);
// exit(EXIT_SUCCESS);
}
void processB() {
// Set signal handler for SIGINT in process B
signal(SIGINT, sigint_handler)