Я пытаюсь реализовать свою собственную оболочку и хочу перевести приостановленное фоновое задание в рабочее состояние, но вместо фона я хочу дождаться выполнения этой работы.
Пока я могу получить, это возобновляет работу, но не ждет ее завершения.
Вот мой процесс, командная функция:
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>