我正在尝试实现自己的shell,如果我收到SIGINT信号,我不知道如何停止它在前台运行的函数。
当这个功能在后台时,它很容易,我只需要创建一个儿子,他将运行该功能:
(...)
int pid = fork();
if (pid == 0){
signal(SIGINT, killProcess)
function();
}
(...)
在另一部分:
void killProcess(int num_signal){
kill(getpid(), SIGKILL);
}
但这在前台不起作用,因为如果函数试图执行“cd”,例如,它将是将改变它的目录而不是shell本身的那个。
该函数不是循环,因此我无法使用变量来停止它。它是一个执行命令的函数,如“cd”,“find”,......
是否可以仅停止/终止函数,而不是整个shell?
谢谢。