Linux进程模型1

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个进程。



猜你喜欢

转载自blog.csdn.net/zangyongcan/article/details/51925477