void shell_signal_init(){
signal(SIGINT, shell_sig_handle); // SIGINT = 2, 用户键入Ctrl-C
signal(SIGQUIT, shell_sig_handle); // SIGQUIT = 3 用户键入Ctr+\
signal(SIGCHLD, shell_bg_signal_handle); //SIGCHLD = 17,一般在子进程中止时产生
signal(SIGTSTP, shell_sig_handle); // SIGTSTP =20,一般有Ctrl-Z产生
}
/*
函数:shell_sig_handle
意义:信号处理函数
*/
void shell_sig_handle(int sig)
{
if (sig == SIGINT) { // SIGINT = 2
printf("\nInstead of Ctrl-C type quit\n");
shell_print_prompt();
} else if(sig == SIGQUIT) { //SIGQUIT = 3
printf("\nType quit to exit\n");
shell_print_prompt();
} else if(sig == SIGTSTP) {
printf("\nInstead of Ctrl-Z type pause\n");
shell_print_prompt();
}
}
在shell父进程里看信号
signal(SIGCHLD, shell_bg_signal_handle);
signal(SIGINT, shell_sig_handle); // SIGINT = 2, 用户键入Ctrl-C
signal(SIGQUIT, shell_sig_handle); /* SIGQUIT = 3 用户键入Ctr+\ */
signal(SIGTSTP, shell_sig_handle); // SIGTSTP =20,一般有Ctrl-Z产生