打印
[应用相关]

进程控制 小知识总结

[复制链接]
553|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)。

使用特权

评论回复
5
stm32jy|  楼主 | 2019-3-25 09:13 | 只看该作者
进程互斥
     若干个进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他使用该资源的进程必须等待,直到该资源者释放了该资源。

使用特权

评论回复
6
stm32jy|  楼主 | 2019-3-25 09:13 | 只看该作者
临界区
     进程中访问临界资源的那段程序代码称为临界区。为实现对临界的互斥访问,应保证诸进程互斥地进入各自的临界区。

使用特权

评论回复
7
stm32jy|  楼主 | 2019-3-25 09:14 | 只看该作者
进程同步
     一组并发进程按一定顺序执行的过程为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间的互斥发送的信号称为消息或事件。

使用特权

评论回复
8
stm32jy|  楼主 | 2019-3-25 09:14 | 只看该作者
进程调度
     按一定算法,从一组待运行的进程中选出一个来占有CPU运行。
     调度方式:1.抢占式;2.非抢占式;
     调度算法:1.先来先服务调度算法;2.短进程优先调度算法;
3.高优先级优先调度算法;4.时间片轮转法;

使用特权

评论回复
9
stm32jy|  楼主 | 2019-3-25 09:15 | 只看该作者
死锁
     多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。

使用特权

评论回复
10
stm32jy|  楼主 | 2019-3-25 09:15 | 只看该作者
获取进程ID
 #include<sys/types.h>
      #include<unistd.h>
      pid_t getpid(void)    // 获取本进程ID
      pid_t getppid(void)   //获取父进程ID
      例:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
  printf("PID=%d\n",getpid());
  printf("PPID=%d\n",getppid());
  return 0;
}

使用特权

评论回复
11
stm32jy|  楼主 | 2019-3-25 09:16 | 只看该作者
创建进程-fork
      #include<unistd.h>     pid_t fork(void);
      功能:创建子进程 ,fork被调用一次,却返回两次,可能有三种不同的返回值:
      01.在父进程中,fork返回新的创建的子进程的pid
      02.在子进程中,fork返回0
      03.如果出现错误,fork返回一个负值

使用特权

评论回复
12
stm32jy|  楼主 | 2019-3-25 09:16 | 只看该作者
代码部分:
例:
        #include<sys/types.h>
#include<unistd.h>
void main()
{
   pid_t pid;
   pid=fork();
   if(pid<0)
   {
      printf("error in fork!");
   }
   else if(pid==0)
      printf("i am the child process, ID is %d\n",getpid());
   else
      printf("i am the parent process,ID is %d\n",getpid());
}


使用特权

评论回复
13
stm32jy|  楼主 | 2019-3-25 09:17 | 只看该作者
输出结果如下图:

使用特权

评论回复
14
stm32jy|  楼主 | 2019-3-25 09:18 | 只看该作者
创建子进程(vfork)
      fork  and  vfork
1.fork :子进程拷贝父进程的数据段。
  vfork:子进程与父进程共享数据段。
2.fork: 父、子进程执行的次序不确定。
  vfork:子进程先运行,父进程后运行。

使用特权

评论回复
15
stm32jy|  楼主 | 2019-3-25 09:19 | 只看该作者
进程等待
#include<sys/types.h>
#include<sys/wait.h>
   pid_t wait(int* status)
功能:阻塞该进程,直到其某个子进程退出。

使用特权

评论回复
16
stm32jy|  楼主 | 2019-3-25 09:19 | 只看该作者
参考代码:
例:#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
void main()
{
   pid_t  pc,pr;
   pc=fork();
   if(pc==0)
   {
     printf("child pid is %d\n",getpid());
     sleep(10);
   }
   else if(pc>0)
   {
        pr =wait(NULL);
        printf("I catch a child process with pid %d",pr);
   }
  exit(0);
}


使用特权

评论回复
17
磨砂| | 2019-4-10 08:50 | 只看该作者
感谢楼主分享

使用特权

评论回复
18
晓伍| | 2019-4-10 08:57 | 只看该作者
讲解很详细

使用特权

评论回复
19
八层楼| | 2019-4-10 09:08 | 只看该作者
条理清晰啊

使用特权

评论回复
20
观海| | 2019-4-10 09:16 | 只看该作者
不是很详细

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

1118

帖子

3

粉丝