我们被要求提示用户输入短语,并继续询问他们,直到他们得到所需的正确短语,持续30秒。以下是我的想法:
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void childprocess(void)
{
int start = 30;
do
{
start--;
sleep(1);
} while (start >= 0);
printf("Time ran out!\n");
exit(EXIT_SUCCESS);
}
int main(void)
{
pid_tiChildID;/* Holds PID of current child */
char word[100] = "cat";
char input[100];
int length;
iChildID = fork();
if (0 > iChildID)
{
perror(NULL);
return 1;
}
else if (0 == iChildID)
{
childprocess();
return 0;
}
/* Parent process */
while (1)
{
fgets(input, sizeof(input), stdin);
length = strlen(input);
if (input[length - 1] == '\n')
{
--length;
input[length] = '\0';
}
if (strcmp(word, input) == 0)
break;
printf("Try again\n");
}
kill(iChildID, SIGUSR1);/* terminate repeating message */
printf("Finally!\n");
return 0;
}
问题:30秒后,它会打印“Time out out”但不会终止。如何在30秒后终止程序?有帮助吗?
答案 0 :(得分:3)
在这里,您使用fork创建两个具有两个不同PID的独立进程。你正在杀死子进程,但是父进程仍在运行,所以程序就是不要退出。
你也可以在同一个进程中使用pthread而不是fork,但是你想要实现的只是简单的报警功能。您不必管理任何其他过程。只需使用闹钟。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
希望它有所帮助!!