当前位置: 技术问答>linux和unix
用fork创建新进程碰到的问题。。。
来源: 互联网 发布时间:2015-09-03
本文导语: 我用下面这个函数创建一个新进程P时,用ps会查看到一大片P的名字。 我的进程P是多线程的,我怀疑和这个有关。。。 是不是呢,该如何解决呢? pid_t spawn(const char *program, char *const arg_list[]) { assert(prog...
我用下面这个函数创建一个新进程P时,用ps会查看到一大片P的名字。
我的进程P是多线程的,我怀疑和这个有关。。。
是不是呢,该如何解决呢?
pid_t spawn(const char *program, char *const arg_list[])
{
assert(program && arg_list);
// Duplicate this process.
pid_t children_pid = fork();
if (children_pid != 0) { // This is the parent process.
return children_pid;
} else { // This is the child process
// Now execute PROGRAM
execv(program, arg_list);
// The execvp function returns only if an error occurs
fprintf(stderr, "Error occurred in spawn()'s execvp. "
"[Bad parameter, or Has no root privilege]n");
abort(); // Abort the child process, no surprise here!
}
}
我的进程P是多线程的,我怀疑和这个有关。。。
是不是呢,该如何解决呢?
pid_t spawn(const char *program, char *const arg_list[])
{
assert(program && arg_list);
// Duplicate this process.
pid_t children_pid = fork();
if (children_pid != 0) { // This is the parent process.
return children_pid;
} else { // This is the child process
// Now execute PROGRAM
execv(program, arg_list);
// The execvp function returns only if an error occurs
fprintf(stderr, "Error occurred in spawn()'s execvp. "
"[Bad parameter, or Has no root privilege]n");
abort(); // Abort the child process, no surprise here!
}
}
|
线程名会跟所在进程同名,至少我用的2.4的内核是这样
所以PS就出来很多同名进程了
所以PS就出来很多同名进程了
|
这需要解决么?没什么不正常的啊
pthread_create用的时候又不支持线程名参数
pthread_create用的时候又不支持线程名参数
|
你用pstree看吧,线程会作为子进程显示出来
|
有办法,别用pthread.
http://www.tldp.org/FAQ/Threads-FAQ/ThreadLibs.html
http://www.tldp.org/FAQ/Threads-FAQ/ThreadLibs.html
|
你可以换个系统。比如solaris下线程就不显示在ps里的。