gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:21:37 26 4
gpt4 key购买 nike

我正在尝试暂停该进程,但它不起作用。这是代码的一部分。有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);
}

主要方法中的代码:

...
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());
}

最佳答案

不是为 SIGTSTPSIGINT 安装信号处理程序,而是使用 cfmakerawtcsetattr 将终端置于原始模式>。 ^C^Z 将像普通字符一样可读,这应该不会那么麻烦。但是,您随后需要自己实现行编辑 -- GNU readline是你的 friend 吗?如需更多建议,请参阅 Implementing a ShellJob Control GNU C Library Manual 的部分. (您可以安全地忽略它试图警告您内核可能不支持作业控制的部分——如果有人仍在使用那些系统之一,他们只能怪自己它。)

关于c - 如何在 mini-shell 中处理信号 Ctrl + Z。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4891214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com