Poniendo un proceso en segundo plano en C

Actualmente estoy buceando en la creación de un trabajo de fondo enC con&. Necesito implementar un no-bloqueo.waitpid para que esto funcione. Yo sé eso. Además, ya estoy tomando la condición si& Se ingresa al final de la línea de comando. Simplemente no estoy seguro de cómo enviar exactamente el proceso con el fin de que sea un trabajo en segundo plano y también implementarlo como ejecución mientras otro mensaje solicita el siguiente comando.
Cualquier cosa ayudaría en absoluto, gracias.

    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;
    }
    }

Bien, he estado trabajando en esto un poco más y creo que puedo estar empezando a entender. Todavía tengo algunos errores de sintaxis que no sé cómo solucionar, por lo que probablemente usaré gdb o algo así, a menos que alguien más pueda señalarlos. ¿Lo estoy haciendo de la manera correcta o estoy completamente equivocado?

Respuestas a la pregunta(1)

Su respuesta a la pregunta