getpid函数:
原型:pid_t getpid(void)
特性:返回值是PID值
用途:获取当前进程PID
用法例
cpp
#include<stdio.h>
#include <sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
pid = getpid();
printf("pid = %d\n",pid);
}
现象:

fork函数:
原型:pid_t fork(void);
特性:fork函数调用成功,返回两次,返回值为0,代表当前进程是子进程,返回值非负数(返回值是子进程的pid),代表当前进程为父进程(执行的是fork()下面的内容(包括本条)),拷贝父进程的存储空间
用途:创建进程
用法例:
cpp
#include<stdio.h>
#include <sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
int sign;
pid = getpid();
printf("father pid = %d\n",pid);
sign = fork();
pid = getpid();
if (sign>0)
{
printf("this is father,pid = %d\n",pid);
}
else if (sign==0)
{
printf("this is child,pid = %d\n",pid);
}
}
现象:

vfork函数:
原型:pid_t vfork(void);
特性:vfork函数调用成功,返回两次,返回值为0,代表当前进程是子进程,返回值非负数(返回值是子进程的pid),代表当前进程为父进程(执行的是vfork()下面的内容(包括本条)),不拷贝父进程的存储空间

用法例:
cpp
#include<stdio.h>
#include <sys/types.h>
#include<unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int data = 10;
int sign;
pid = getpid();
printf("father pid = %d\n",pid);
sign = vfork();
pid = getpid();
if (sign>0)
{
printf("this is father,pid = %d\n",pid);
printf("data = %d\n",data);
}
else if (sign==0)
{
printf("this is child,pid = %d\n",pid);
data = 5;
exit(0);
}
return 0;
}
现象:
