clone 的实例
int StartUpdate(void * cmd)
{
system((char*)cmd);
cout << "Pid" << getpid() << endl;
log_info(NULL,"clone pid [%d] ppid[%d], cmd:%s\n", getpid(),getppid(), cmd);
while(1)
;
return 0;
}
{
char buf[32]=“”;
char * stack = (char* )malloc(10240);
clone(&StartUpdate,stack + 10240, CLONE_PARENT | CLONE_FILES, buf);
}
clone 是创建一个新的进程,它的进程ID 和父进程不一样, fork 的子进程拷贝一份资源从父进程,比如文件描述符子进程关闭一次,父进程也得关一次这是因为引用计数。
而clone 的参数CLONE_FILES如果设置就是共享文件描述符,不管子进程还是调用进程只需关闭一次就可以,这个时候这个进程就类似线程了。