Размещение процесса в фоновом режиме в C

Я сейчас погружаюсь в создание фоновой работы вC с&, Мне нужно реализовать неблокирующуюwaitpid для того, чтобы это работало. Я знаю это. Кроме того, я уже ловлю состояние, если& вводится в конце командной строки. Я просто не уверен, как точно отправить процесс с концом в фоновое задание, а также реализовать его как выполняющийся, пока другое приглашение запрашивает следующую команду.
Все поможет, спасибо.

    struct bgprocess{
        int pid;
        struct bgprocess * next;
        struct bgprocess * prev;    
    };

    struct bgprocess * bgprocess1;
    bgprocess1 = malloc(sizeof(struct bgprocess));
    bgprocess1->prev = NULL;
    bgprocess1->next = NULL;
    bgprocess1->pid = NULL;

    struct bgprocess * current;
    current = bgprocess1;

    do{
        int bgreturn = 0;
        while (current != NULL){
            if (waitpid(current->pid, &bgreturn, WNOHANG)){
                printf("Child exited");
                current->prev->next = current->next;
                current->next->prev = current->prev;
                current->prev = NULL;
                current->next = NULL;
                free(current);                  
            }
        current = current->next;    
        }
        if (end){
            int pid = fork();
            if (pid < 0){
                exit(1);            
            }       
            if (pid) {
                execvp(args[0], args);          
                exit(0);            
            }

            struct bgprocess * newNode;
            newNode = malloc(sizeof(struct bgprocess));
            newNode->pid = pid;
            newNode->next = NULL;

            if (current->next == NULL){
                current->next = newNode;        
            }
            while (1){
                if (current->next == NULL){
                    current->next = newNode;
                }           
                current = current->next;
            }

        }
    }
    while (current != NULL);

    int bgreturn = 0;
    while (current != NULL){
        if (waitpid(current->pid, &bgreturn,0)){
            printf("Child exited");
            current->prev->next = current->next;
            current->next->prev = current->prev;
            current->prev = NULL;
            current->next = NULL;
            free(current);  
        }
        current = current->next;
    }
    }

Хорошо, так что я работал над этим еще немного, и я думаю, что, возможно, начинаю понимать. У меня все еще есть несколько синтаксических ошибок, которые я не знаю, как исправить, так что я, вероятно, буду использовать gdb или что-то еще, если кто-то еще не может указать на них. Я поступаю правильно или я совершенно неправ?

Ответы на вопрос(1)

Ваш ответ на вопрос