【问题标题】:How to run a background process before all foreground processes or a particular foreground process?如何在所有前台进程或特定前台进程之前运行后台进程?
【发布时间】:2016-10-26 09:06:04
【问题描述】:

这是一个程序system.c

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        system("./client &");
        printf("WE are in main program\n");
        printf("WE are in main program\n");
        printf("WE are in main program\n");
        printf("WE are in main program\n");
        printf("WE are in main program\n");
        return 0;
     }

这是 client.c

#include <stdio.h>
int main()
{
    printf("We are in background process\n");
    do {
        //doing some process on message queue to receive messages
    } while (1);
    return 0;
}   

如何获取输出 ./system 像下面这样从 linux 终端运行

We are in background process
WE are in main program
WE are in main program
WE are in main program
WE are in main program
WE are in main program

谁能更清楚地解释一下?

【问题讨论】:

  • 您希望使用多个进程进行序列化运行?如果要先执行client,为什么要在后台单独运行它?
  • 条件是 1.我应该在后台运行客户端 2.系统在前台并且输出应该和上面一样
  • @pradeep 你必须使用系统和客户端程序吗?还是您的任务是创建一个运行后台进程并在前台进程中等待直到后台进程完成的进程?

标签: c linux gcc ubuntu-14.04 cpu


【解决方案1】:

也许看看这个并激励自己。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int pid;
    int status;

    pid = fork();
    if (pid == -1)
    {
        // handle error
    }

    if (pid == 0)
    {
        // exec child process
        execl("./client", "client", NULL);
    }
    else
    {
        wait(&status);
    }

    printf("WE are in main program\n");
    printf("WE are in main program\n");
    printf("WE are in main program\n");
    printf("WE are in main program\n");
    printf("WE are in main program\n");
    return 0;
}

【讨论】:

  • ....使用 fork 是一个不错的选择。但是如果客户正在做一些连续运行的工作。如果它永远不会结束。那么父母应该总是等待。我只想知道我的客户在客户端成功运行到该打印语句。有什么方法可以知道这种状态...???
  • 所以你的打印语句可以理解为子进程的初始化。所以父母应该等到孩子达到某个点(直到它被初始化并运行)然后继续工作而不关心孩子?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多