【发布时间】:2018-08-28 16:49:52
【问题描述】:
我用fork和exec启动一个进程,但是当我使用ps比如ps afx | grep sublime查找pid时,我发现这两个pid(一个是fork()返回值,另一个是@987654327 @result) 不同。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int create_process(char *name, char *argv[])
{
int pid = fork();
if (0 == pid)
{
execv(name, argv);
exit(127);
}
else if (0 < pid)
{
return pid;
}else
{
return -1;
}
}
int forkstyle_system(char *cmdstring)
{
int pid = fork();
if (0 == pid)
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
exit(127);
}
else if (0 < pid)
{
return pid;
}
else
{
return -1;
}
}
int main()
{
//method 1
char *name = "/opt/sublime_text/sublime_text";
char *argv[] = {"/opt/sublime_text/sublime_text", (char *)0};
int pid = create_process(name, argv);
printf("pid = %d\n",pid);
//method 2
/*
char *cmdstring = "/opt/sublime_text/sublime_text";
int pd = forkstyle_system(cmdstring);
printf("pid = %d\n",pd);
*/
return 0;
}
方法一的结果
方法2的结果
我感到很困惑,因为我认为,在孩子身上,execv() 的使用是无关紧要的;这不会改变 pid。
【问题讨论】:
-
看起来
sublime_text在内部使用fork()。
标签: linux