【发布时间】:2025-03-26 23:00:02
【问题描述】:
我正在用 C 语言构建自己的 shell。我想实现一个名为 alarm 的内置函数,它接受一个整数参数来表示秒数。内置只在 i 秒(一次)后向用户发送一条消息,但同时 shell 功能应该继续工作。
这是我目前所拥有的:
int seconds;
int main(int argc, char const *argv[], char* envp[]){
...
signal(SIGALRM, alarmHandler);
...
}
void alarmHandler(int sig) {
signal(sig, SIG_IGN);
alarm(seconds);
printf("%s\n", "message");
signal(SIGALRM, alarmHandler);
}
void mainProgram(char* string, char* argument){
... //built ins that don't require forking
pid_t processID = fork();
if(processID==0){ //child
if(strcmp(string, "alarm") == 0){
seconds = atoi(argument);
signal(SIGALRM, alarmHandler);
}else{ // parent
usleep(100000)
}
显然这行不通。我有点迷路了。在过去的几个小时里,我一直在尝试这个,但我不确定该怎么做。
【问题讨论】:
-
“不起作用”不是一个充分的问题描述。请更具体地描述您面临的问题。
-
好吧,使用上面的代码,没有任何反应。因此,如果我输入警报 4,就好像我只是输入了 enter 并且 shell 会打印出提示符
-
为什么要在报警处理器中设置报警?除非已经设置了警报,否则不会调用处理程序。