如何在 mini-shell 中处理 Ctrl + Z 信号。C

Khu*_*eyn 3 c linux

我试图暂停该过程,但它不起作用。这是代码的一部分。有 Ctrl+Z 和 Ctrl+C。Ctrl+C 正在工作。我不明白为什么 Z 不起作用。(实际代码):

//ctrl+Z
void sigstop(int p){
    signal(SIGTSTP,&sigstop);
    kill(my_pid,SIGSTOP);

    fflush(stdout);
}

// Ctrl+C
void sigkill(int p){
    signal(SIGINT,&sigkill);  
    kill(my_pid,SIGKILL);

    fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)

main方法中的代码:

...
my_pid = fork();    
if (my_pid == 0) {
    signal(SIGTSTP,&sigstop);      //for Ctrl+Z
    signal(SIGINT,&sigkill);       //for Ctrl+C

    checkCommand();        
    execvp(argv[0], argv);
    exit(getpid());    
}
Run Code Online (Sandbox Code Playgroud)

zwo*_*wol 6

不要为SIGTSTP和安装信号处理程序,而是使用或SIGINT将终端置于原始模式。 然后就可以像普通字符一样读取,这应该不会那么麻烦。然而,您将需要自己实现行编辑——GNU readline是您的朋友。如需进一步的建议,请参阅GNU C 库手册实现 Shell作业控制部分。(您可以安全地忽略它试图警告您内核可能不支持作业控制的部分 - 如果有人仍在使用这些系统之一,则只能归咎于他们自己。)cfmakerawtcsetattr^C^Z