getpid函数:
原型:pid_t getpid(void)
特性:返回值是PID值
用途:获取当前进程PID
用法例
#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()下面的内容(包括本条)),拷贝父进程的存储空间
用途:创建进程
用法例:
#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()下面的内容(包括本条)),不拷贝父进程的存储空间
用法例:
#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;
}
现象:
wait函数 和 waitpid函数 和相关函数:
原型:
特性:wait函数等待子进程退出(而waitpid函数可以不用等待子进程退出)并把退出的值返回给status指针指向的空间(但是这个值不能直接输出,要经过一次转换)(WEXITSTATUS(status),这里的status是wait的返回值,经过WEXITSTATUS函数返回的才是子进程退出值)
init进程的pid是1
getppid函数:
原型: pid_t geippid(void)
特性:获取该进程的父进程的的pid
perror函数:
特性:打印错误信息
system函数:
特性:用来打开程序,功能类似exec,但是system会返回到原程序,exec不会,exec是完全替换掉原程序
用法例:system("./a.out nihao")相当于在shell里输入这个字符串
popen函数:
原型:
特性:相比exec和system比,多了可以读取返回值的功能
用法例:popen("ls","r")//w是写,r是读,读到的数据会放到管道/流里(FILE),所以要用该类型接收
FILE fp = popen("ls","r");
fread(ret,1,1024,fp);//读到ret这个指针指向的空间,读一次,1024字节,读fp里的数据