Как использовать C popen в pthread - PullRequest
0 голосов
/ 19 февраля 2019

Во-первых, я читал некоторые комментарии на форумах о том, что рекомендуется избегать использования fork в темах, а popen делает форк.

В любом случае, я делаю программу с некоторыми потокамии мне будет очень полезно использовать другие библиотечные функции, которые выполняют popen.

Когда я это сделаю, программа завершается.

Позвольте мне привести простой пример, потому что кодlarge:

int main()
{
    pthread_t thread1, thread2;
    int var=1;
    pthread_create(&thread1, NULL, mythread, &var);
    pthread_create(&thread2, NULL, anotherthread, &var);
...
}

void *mythread(void *s)
{
...
    pthread_detach(pthread_self());
...
    printf("this is printed\n");
    char *str = externalFunctWithPopen();
    printf("this is NEVER printed\n");
...
}

char *externalFunctWithPopen()
{
...
    printf("this is also printed\n");
    popf = popen(command, "r"); 
    printf("this is not printed at all\n");
    while (fgets(buf, sizeof(buf), popf) != 0) {
...
}

Как я уже говорил, "это никогда не печатается" никогда не печатается, и, кроме того, главные выходы, включая другой поток, называемый anotherthread

Любая помощь может приветствоваться.

1 Ответ

0 голосов
/ 19 февраля 2019

главных выходов, включая другой поток

Чтобы избежать поведения, при котором main() разрушает все другие потоки того же процесса.оставьте его через pthread_exit() вместо exit() или просто return.

...