系统编程学习第二天

进程控制编程
概念:是进行活动,资源分配的最小单元。与程序的区别:程序是放在磁盘中的可执行文件,进程包括程序,数据,进程控制块。
ps -elf表示打开进程查找。
pid :进程名 ppid:父进程; 1一般表示祖先进程。一般删不了。ctrl+z表示切到后台。fg:后台切到前台。,命令在前台运行。ps -clf | grep +关键字 是表示查找当前关键字里的进程。
shift+zz表示退出,结束进程。进程的生命周期表示:创建,运行,撤销。
进程的状态:执行,就绪,等待。

进程创建:
fork:功能:子进程拷贝父进程数据,并且两个进程可以同时执行,不过顺序不一定。
vfork:功能:子进程共享父进程的地址空间。
例句:
if(-1 ==pid)
{
perror(“vfork”);
}
else if(0 ==pid) //一定是子进程先运行
{
a++;
printf(“this is child \n”);
exit(1); //子进程执行退出状态
}

int main()
{
pid_t pid;
pid =vfork();
if(-1 ==pid)
{
perror(“vfork”);
else if(0 ==pid)
{
sleep(1);
printf(“this is child :pid =%d\n”,getpid());
execl("/bin/ls/",“ls”,"-l","-a",NULL); 启动新进程
}
else
{
printf(“this is paernt :pid =%d\n”,getpid()’);
int status; //保存子进程退出状态
wait (&status);
wait(pid,&status,0); //等待指定的进程结束
}
}
}
pid_t wait (int * status)
功能:阻塞该进程,直到其某个子进程退出。
exit:在停止进程之前,先检查文件情况,再停止进程。(补充:exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。)

孤儿进程:父进程提前结束。
僵尸进程:父进程没有回收子进程的资源。
进程ID:(pid)标识进程的唯一数字。父进程的ID:(ppid);
pid_t getpid();获取本进程的id;
pid_t getppid();获取父进程的id;
fork的奇妙之处在于,它被调用一次,却返回两次,它可能又三种不同的返回值。
返回值:
0:子进程; 子进程id>0:父进程
-1:出错
在pid=fork()之前,只有一个进程在执行,但在这条语句执行之后,就变成两个进程在执行了,这两个进程的共享代码段,将要执行的下一条语句都是if(pid==0).
两个进程中,原来就存在的那个进程被称作“父进程”,新出现的那个进程被称作“子进程”,父子进程的区别在于进程标识符(PID)不同.
表头文件: #include<unistd.h>定义函数: pid_t vfork(void);函数说明:
vfork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量、已打开的文件代码、工作目录和资源限制等。
子进程不会继承父进程的文件锁定和未处理的信号
kill(pid,SIGKILL) //给指定进程发送信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值