c - 运行子程序,同时定期读取文件,并知道子程序何时结束

标签 c linux

我有一系列我想运行的程序,它们都在运行时更改一个文件,我们称之为 example.txt。

我正在尝试编写一个可以运行一系列程序的程序,节省每个程序所花费的时间,并在其执行期间获得 example.txt 文件的快照。我只对 example.txt 中的一行感兴趣,并且已经有了提取它的代码,这只是调用一个函数的问题。

在 Windows 中,我会使用 spawn() 系列函数,但这在 Linux 中似乎不是一个选项。我也知道如何为节目计时(开始时间 - 结束时间)。

我需要一个函数,它可以与父级同时生成子级,然后在子级完成时提供一条消息,以便父​​级可以获取系统时间。

最佳答案

将问题分解后,事情变得容易多了。

问题一:如何产卵?

问题 2:如何在收到子结束的“通知”后让父结束。

要解决问题 1,只需阅读 fork() 的文档即可

 switch ((pid = fork())) {
            case -1:
                    /* fork() has failed */
                    perror("fork");
                    break;
            case 0:
                    /* Processed by the child */
                    execv("child", my_args);
                    puts("execv() has failed");
                    exit(EXIT_FAILURE);
                    break;
            default:
                    /* processed by the parent  */
                    puts("Message from the parent");
                    break;
    }

问题 2 通过调用 wait() 解决,准确地说是 waitpid()。以下代码只是添加到上面代码的底部。

    int status;
    while(!waitpid(pid, &status, WNOHANG)) {
            /* Parent does stuff while waiting for child */
    }
    /* Parent gets here once child has ended */

有了上面的注释,就很清楚应该把它添加到我的代码中了。我添加了评论以使其更像是一个通用的解决方案。

在 while 循环中,我从文件中读取数据,在从 while 循环中断后,我将获取结束系统时间。

关于c - 运行子程序,同时定期读取文件,并知道子程序何时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294793/

相关文章:

c SIGINT 起作用了吗?

c - 可能是多线程环境下的 Errno 描述

c - ARM v4 从调用 SWI 的 C 函数返回存储在 r0 中的值

c - 如何使指针在新结构中兼容?

linux - 为什么我看到的线程数比我在 `ps` 列表中创建的线程数多一个?

c - 将链表中的值添加到变量

linux - perl 解压文件

linux - 如何使用 Linux 调度程序将 CPU 核心限制为仅 2 个应用程序?

linux - 从私钥生成公共(public) ssh key

linux - 将 jiffies 转换为秒