C-程序将在30秒后终止

时间:2016-11-10 02:24:19

标签: c time

我们被要求提示用户输入短语,并继续询问他们,直到他们得到所需的正确短语,持续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秒后终止程序?有帮助吗?

1 个答案:

答案 0 :(得分:3)

在这里,您使用fork创建两个具有两个不同PID的独立进程。你正在杀死子进程,但是父进程仍在运行,所以程序就是不要退出。

你也可以在同一个进程中使用pthread而不是fork,但是你想要实现的只是简单的报警功能。您不必管理任何其他过程。只需使用闹钟。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>

希望它有所帮助!!