Inter-Process Communication 进程间通信
===========================================
接下来几个重点先列出来
1进程辨识符pid(学控制的童鞋注意,这个pid不是那个pid)
2进程的产生 fork函数 vfork函数
3进程的消亡释放资源(也就是常说的收尸)
4exec函数
5用户权限和组权限
6.system函数
7.进程会计
8.进程时间
9 守护进程(精灵进程)
10.系统日志
============================================
ps命令
ps axf 描述当前的进程
ps axm 以详细信息来查看
ps ax -L 以linux特有的来查看,多了个LWP行
=============================================
1.pid_t pid pid_t是有符号整形数字
init 进程是1号进程
pid是个进程号,是顺次向下的
getpid() getppid()获得进程号和获得父进程号
2进程的产生
fork()和vfork()
fork执行一次,返回两次,一次在子进程中返回,一次在父进程中返回
pid_t fork()子进程是通过父进程实现的, 除了pid和ppid 当然儿子和爹不能一个pid号。执行到的位置也是一样的~~~~
父子进程的区别:
1fork的返回值不一样
2pid,ppid不同
3.未决信号,文件锁不继承(未决信号:还没执行)
4资源利用率清零
init进程是:所有进程的祖先进程 1号进程
=======来个fork的例子,运行的时候不知道是父先执行,还是子先执行============================
这个是调度器的调度策略来决定谁先运行的。。。。。。。。。。
假如一定要子先运行,就给父亲来个sleep(不推荐这么用,就是为了演示一下)
运行代码会看到begin 一次,end两次
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
pid_t pid;
printf(" %d begin!\n",getpid());
fflush(NULL);//刷新所有的流,这个很重要,如果不刷新的话,会出现begin两次,如果用重定向可以看到两次begin
pid = fork();
if(pid < 0)
{
perror("fork()");
exit(1);
}
if (pid ==0)
{
printf("%d, i am a child\n",getpid());
}
else
{
printf("%d, i am a parent\n",getpid());
}
printf(" %d END!\n",getpid());
exit(0);
}