# 系统编程(系统函数)进程

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();
上一篇 下一篇

猜你喜欢

热点阅读