Завершение основного процесса по завершении вторичного процесса

У меня есть программа Main C, которая создает два потока, и каждый из этих потоков запускает процесс, используя вызов system(). Можно ли завершить основную программу, как только любой из процессов, созданных потоками, закончит свою работу?

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/shm.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

extern errno;
key_t key = 1;
int *shm;

void* Start_Ether(){
    printf("Creating Ethernet Process\n");
    int ret = system("sudo ./Ether");
    if (ret < 0){
        printf("Error Starting Ethernet Process\n");
    }
}

void* Start_Display(){
    printf("Creating Display Process\n");
    int ret = system("./Display");
    if (ret < 0){
        printf("Error Starting Display Process\n");
    }
}

int main (int argc, char **argv)
{                       
    pthread_t Ether, opengl;
    int ret1, ret2;
    printf("**********************************************\nMain Started\n**********************************************\n");   
    ret2 = pthread_create(&opengl, NULL, &Start_Display, NULL);
    if (ret2 != 0){
       printf("Error in Creating Display Thread\n");
    }
    ret1 = pthread_create(&Ether, NULL, &Start_Ether, NULL);
    if (ret1 != 0){
        printf("Error in Creating Ether Thread\n");
    }
    while(1){
        continue;   
    }
    return 1;
}

person Steven Fisher    schedule 26.07.2012    source источник


Ответы (1)


Функция system возвращается, как только завершается вызванная ею команда. Таким образом, самый простой способ завершить процесс — вызвать любой из потоков exit.

void* Start_Display()
{
    /* ... */
    exit(0);
    return NULL;
}

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

person cnicutar    schedule 26.07.2012