Q:为什么要知道一个进程的PID以及它父进程的PID呢?
K:因为PID创建唯一的文件或目录名;把PID写入日志文件做为日志消息的一部分。
1、得到PID和PPID的例子:
int main(void) {
printf("pid = %d\n", getpid());
printf("ppid = %d\n", getppid());
return EXIT_SUCCESS;
}
pid的值是动态分配的,每次执行的结果都不一样,在程序运行的过程中不改变。
2、得到登陆的用户号、用户名,宿主目录信息。
char *login = getlogin();
struct passwd *ps = getpwnam(login);
printf("user name = %s\n",ps->pw_name);
printf("uid = %d\n",ps->pw_uid);
printf("home dir = %s\n",ps->pw_dir);
3、system函数(很少用)
system("ls");
4、fork 函数
pid_t child = fork(); //返回0,表示是子进程;返回大于0的数,是父进程。
父进程id号比子进程id号小,因为父进程先创建。
int main(void) {
printf("begin\n");
pid_t child = fork();
if(child == -1)
{
return -1;
}
if(child == 0)
{
printf("is child\n");
}else
{
printf("is parent\n");
}
printf("end\n");
return EXIT_SUCCESS;
}
上述代码,begin 打印一次,end 打印两次。因此程序从fork语句开始,在父、子线程各调用一次。
如,下面程序:
int main(void) {pid_t child = 0;
int i = 0;
for(;i < 4;i++)
{
child = fork();
}
while(1)
{
sleep(1);
}
return EXIT_SUCCESS;
}
运行后,将一共有16个进程。