Ждите фоновой работы в C - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь реализовать свою собственную оболочку и хочу перевести приостановленное фоновое задание в рабочее состояние, но вместо фона я хочу дождаться выполнения этой работы.

Пока я могу получить, это возобновляет работу, но не ждет ее завершения.

Вот мой процесс, командная функция:

pid_t pid=fork();
if (pid==0) // child
{
      ...
      if(strcmp(command->name, "myfg") == 0){

            FILE *sp;
            char  proc[100];
            char *pid_comm = command->args[0];

            int PID = atoi(pid_comm);

            sprintf(proc, "/bin/kill -CONT %s", pid_comm);
            sp = popen(proc, "r");
            if (sp == NULL) {
                printf("Failed to run kill\n");
                exit(1);
            }
            pclose(sp);

            int status;
            waitpid(PID, &status, 0);
            // to check if it is waiting
            printf("%d\n", PID);

        } 
         ...
 }
 else
 {
    if (!command->background)
        wait(0); // wait for child process to finish
    return SUCCESS;
 }

Я проверял это команда с sleep 200 & и эта работа имеет свой собственный PID, который я могу получить из списка работ. Однако я не могу заставить программу ждать.

моя команда выглядит так: myfg <PID>

...