我知道在线程中调用 fork() sys_call
是个坏主意。然而,如果一个线程使用 fork()
创建了一个新进程会发生什么呢?
新进程将会是创建该线程的主线程的子进程。我认为是这样。
如果它的父进程先结束,那么新进程将会被附加到 init 进程上。其父进程是主线程,而不是创建它的线程。
如果我有误请指出。
#include <stdio.h>
#include <pthread.h>
int main ()
{
thread_t pid;
pthread_create(&(pid), NULL, &(f),NULL);
pthread_join(tid, NULL);
return 0;
}
void* f()
{
int i;
i = fork();
if (i < 0) {
// handle error
} else if (i == 0) // son process
{
// Do something;
} else {
// Do something;
}
}
exec
来运行某个命令,并在完成命令后销毁子进程,那么子进程如何向创建它的线程/父进程发送通知呢? - y_159exec
替换 了当前进程。如果这个当前进程是由 fork 创建的,那么父进程就像“继承”了启动的其他可执行文件作为子进程。也就是说,如果子进程打开管道与其父进程连接到 STDIN 和 STOUT,当你使用exec
时,父进程就通过这些管道连接到新可执行文件的 STDIN 和 STDOUT。请参考这个 SO 回答中的非常好的例子:https://dev59.com/6XRB5IYBdhLWcg3w4bGv#479103 - Ichthyo