[应用相关] 进程控制 小知识总结

[复制链接]
918|19
 楼主| stm32jy 发表于 2019-3-25 09:11 | 显示全部楼层 |阅读模式
进程定义
     进程是一个具有一定独立功能的程序的一次运行活动   进程是一个具有一定独立功能的程序的一次运行活动

 楼主| stm32jy 发表于 2019-3-25 09:12 | 显示全部楼层
进程特点
     动态性、并发性、独立性、异步性。
 楼主| stm32jy 发表于 2019-3-25 09:12 | 显示全部楼层
状态
     三态: 就绪、阻塞、执行。
 楼主| stm32jy 发表于 2019-3-25 09:13 | 显示全部楼层
进程ID(PID)
     标识进程的唯一数字。父进程ID(PPID),启动进程的用户ID(UID)。
 楼主| stm32jy 发表于 2019-3-25 09:13 | 显示全部楼层
进程互斥
     若干个进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他使用该资源的进程必须等待,直到该资源者释放了该资源。
 楼主| stm32jy 发表于 2019-3-25 09:13 | 显示全部楼层
临界区
     进程中访问临界资源的那段程序代码称为临界区。为实现对临界的互斥访问,应保证诸进程互斥地进入各自的临界区。
 楼主| stm32jy 发表于 2019-3-25 09:14 | 显示全部楼层
进程同步
     一组并发进程按一定顺序执行的过程为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间的互斥发送的信号称为消息或事件。
 楼主| stm32jy 发表于 2019-3-25 09:14 | 显示全部楼层
进程调度
     按一定算法,从一组待运行的进程中选出一个来占有CPU运行。
     调度方式:1.抢占式;2.非抢占式;
     调度算法:1.先来先服务调度算法;2.短进程优先调度算法;
3.高优先级优先调度算法;4.时间片轮转法;
 楼主| stm32jy 发表于 2019-3-25 09:15 | 显示全部楼层
死锁
     多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
 楼主| stm32jy 发表于 2019-3-25 09:15 | 显示全部楼层
获取进程ID
  1. #include<sys/types.h>
  2.       #include<unistd.h>
  3.       pid_t getpid(void)    // 获取本进程ID
  4.       pid_t getppid(void)   //获取父进程ID
  5.       例:
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<unistd.h>
  9. int main()
  10. {
  11.   printf("PID=%d\n",getpid());
  12.   printf("PPID=%d\n",getppid());
  13.   return 0;
  14. }

 楼主| stm32jy 发表于 2019-3-25 09:16 | 显示全部楼层
创建进程-fork
      #include<unistd.h>     pid_t fork(void);
      功能:创建子进程 ,fork被调用一次,却返回两次,可能有三种不同的返回值:
      01.在父进程中,fork返回新的创建的子进程的pid
      02.在子进程中,fork返回0
      03.如果出现错误,fork返回一个负值
 楼主| stm32jy 发表于 2019-3-25 09:16 | 显示全部楼层
代码部分:
  1. 例:
  2.         #include<sys/types.h>
  3. #include<unistd.h>
  4. void main()
  5. {
  6.    pid_t pid;
  7.    pid=fork();
  8.    if(pid<0)
  9.    {
  10.       printf("error in fork!");
  11.    }
  12.    else if(pid==0)
  13.       printf("i am the child process, ID is %d\n",getpid());
  14.    else
  15.       printf("i am the parent process,ID is %d\n",getpid());
  16. }


 楼主| stm32jy 发表于 2019-3-25 09:17 | 显示全部楼层
输出结果如下图:
645585c982c1eaaee5.png
 楼主| stm32jy 发表于 2019-3-25 09:18 | 显示全部楼层
创建子进程(vfork)
      fork  and  vfork
1.fork :子进程拷贝父进程的数据段。
  vfork:子进程与父进程共享数据段。
2.fork: 父、子进程执行的次序不确定。
  vfork:子进程先运行,父进程后运行。
 楼主| stm32jy 发表于 2019-3-25 09:19 | 显示全部楼层
进程等待
#include<sys/types.h>
#include<sys/wait.h>
   pid_t wait(int* status)
功能:阻塞该进程,直到其某个子进程退出。
 楼主| stm32jy 发表于 2019-3-25 09:19 | 显示全部楼层
参考代码:
  1. 例:#include<stdlib.h>
  2. #include<sys/types.h>
  3. #include<sys/wait.h>
  4. #include<unistd.h>
  5. void main()
  6. {
  7.    pid_t  pc,pr;
  8.    pc=fork();
  9.    if(pc==0)
  10.    {
  11.      printf("child pid is %d\n",getpid());
  12.      sleep(10);
  13.    }
  14.    else if(pc>0)
  15.    {
  16.         pr =wait(NULL);
  17.         printf("I catch a child process with pid %d",pr);
  18.    }
  19.   exit(0);
  20. }


磨砂 发表于 2019-4-10 08:50 | 显示全部楼层
感谢楼主分享
晓伍 发表于 2019-4-10 08:57 | 显示全部楼层
讲解很详细
八层楼 发表于 2019-4-10 09:08 | 显示全部楼层
条理清晰啊
观海 发表于 2019-4-10 09:16 | 显示全部楼层
不是很详细
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部