# 系统编程(系统函数)进程
2020-03-04 本文已影响0人
笑我飘零丶
eg:进程函数,getpid() getppid()
getpid()//获取当前进程的id
getppid()//获取当前进程的父进程的id a.out的id
kill -9 进程id //杀死这个进程
eg:fork()//进程分裂
//有两个返回值
//在父进程中,fork返回新创建子进程的进程PID。
//在子进程中,fork返回0。
#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
int main()
{
int pid=fork();
printf("pid_fork=%d\n",pid);
if(pid>0){
//父进程
printf("father\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
while(1);//一直运行这个父进程
}
else if(pid==0){
//子进程
printf("child\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
while(1);
}
}
eg:通过fork()衍生出的孤儿进程,父进程执行完,子进程持续执行,ctrl+c也退不掉,得用kill
#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
int main()
{
int pid=fork();
printf("pid_fork=%d\n",pid);
if(pid>0){
//父进程
printf("father\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
}
else if(pid==0){
//子进程
printf("child\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
while(1);
}
}
eg:僵尸进程 Z 子进程没有被父进程回收掉就执行完了,父进程一直在执行
int main()
{
int pid=fork();
printf("pid_fork=%d\n",pid);
if(pid>0){
//子进程
printf("father\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
}
else if(pid==0){
//父进程
while(1){
sleep(2);//睡眠函数,停顿两秒
printf("child\n");
printf("pid=%d\n",getpid());
printf("ppid=%d\n",getppid());
}
}
}
eg:system()调用系统命令
system(linux命令);//system("ll"); system("ps-ef"); system("mkdir"); system("./a.out");linux命令不能是cd
eg:execl() system()可以继续执行当前进程,而execl()执行完一个就不往下面执行了
execl("/bin/ls","ls","-l",NULL);
//类似于system();