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?