首先,我已经在论坛上阅读了一些建议,建议避免在线程中使用fork
,而popen
确实会分叉。
无论如何,我正在编写一个带有一些线程的程序,对我来说,使用执行popen
的其他库函数将非常有用。
当我这样做时,程序退出。
让我举一个简单的例子,因为代码很大:
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
的线程欢迎任何帮助。
答案 0 :(得分:1)
主要出口,包括其他线程
为避免离开main()
会破坏同一进程的所有其他线程的行为。通过调用pthread_exit()
离开它,而不是exit()
或仅return
。