zoukankan      html  css  js  c++  java
  • linux应用程序开发-进程程序设计

    学习之前必须了解基本的概念:

    进程,线程,进程3种状态,进程调度以及4种算法,进程同步,死锁,记不清的找度娘。

    获取ID

    #include<sys/types.h>

    #include<unistd.h>

    获取本进程ID:

    pid_t getpid(void)

    获取父进程ID:

    pid_t getppid(void)

    举例:

    #include<stdio.h>

    #include<stdlib.h>

    #include<unistd.h>

    int main(void)

    {

      printf("PID=%d ",getpid());

      printf("PID=%d ",getppid());

         return 0;

    }

    进程创建:

    #include<unistd.h>

    pid_t fork(void)

    创建子进程;被调用一次,返回两次,可能3种取值;

    1.父进程中,返回子进程PID;

    2.子进程中,返回0;

    3.错误返回一个负值;

    子进程的数据空间,堆栈空间都会从父进程一个copy,而不是共享。

    -vfork

    pid_t vfork(void)

    区别:vfork子进程与父进程共享数据段。

        vfork子进程先执行,父进程后执行。

        fork次序不确定;

    exec函数族:

    被执行的程序替换调用它的程序:

    区别:

      fork创建一个新进程,产生一个新PID;

      exec启动一个新程序,替换原有进程,PID不变。

    #include<unistd.h>

    int execl(const char*path,const char*arg1,...);

    path:被执行的程序名

    argn:命令行参数,含参数名,以空指针(NULL)结束

    举例:

    #include<unistd.h>

      main()

      {

        execl("/bin/ls","ls","-al","/etc/passwd",(char*)0);

      }

    #include<unistd.h>

    int execp(const char*path,const char*arg1,...);

    path:被执行的程序名(不含路径,从path环境变量中查找)。

    exmple:

    execp("ls","ls","-al","/etc/passwd",(char*)0);

    #include<unistd.h>

    int execv(const char*path, char*const argv[]);

    example:

    #include<unistd.h>

    main
    {

    char *argvl[]={"ls","-al","/etc/passwd",(char*)0};

    execv("/bin/ls",argv);

    }

    #include<stdlib.h>

    int system(const char*sring);

    调用fork产生子进程,由子进程调用/bin/sh -c string来执行参数string所代表的命令。

    e:

    system("ls -al /etc/passwd");

    进程等待:

    #include<sys/types.h>

    #include<sys/wait.h>

      pid_t wait(int*status)

    阻塞该进程,直到某个进程退出。

      

  • 相关阅读:
    [转]Spring的IOC原理[通俗解释一下]
    自我介绍
    什么是存储过程
    Linux 之 最常用的20条命令
    [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
    mysql 多表连接
    正则表达式
    postman 测试API
    [转]mysql 视图
    数据库 修改统一显示时间
  • 原文地址:https://www.cnblogs.com/summer-xwq/p/4162314.html
Copyright © 2011-2022 走看看