进程

进程介绍:

一个进程是一个程序的一次执行的过程,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合,进程是一个动态的概念。它是 Linux 系统分配资源的基本单位。


进程在运行中的三种状态:
执行(Running)状态:CPU 正在执行,即进程正在占用 CPU。
就绪(Waiting)状态:进程已经具备的执行的一切条件,正在等待分配 CPU 的处理时间片。
停止(Stoped)状态:进程不能使用 CPU。


理解 Linux 下进程的结构
Linux 中一个进程在内存里有三部份的数据,就是"数据段","堆栈段"和"代码段",基于 I386
兼容的中央处理器,都有上述三种段寄存器,以方便操作系统的运行。


代码段,是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量,常数以及动态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。堆栈段包括进程控制块 PCB(Process Control Block)中。PCB 处于进程核心堆栈的底部,不需要额外分配空间。


Linux 调度策略
1.SCHED_OTHER 分时调度策略,
2.SCHED_FIFO 实时调度策略,先到先服务
3.SCHED_RR 实时调度策略,时间片轮转


Linux 进程的创建
在 Linux 下产生新的进程的系统调用就是 fork 函数,这个函数名是英文中"分叉"的意思。
为什么取这个名字呢?因为一个进程在运行中,如果使用了 fork,就产生了另一个进程,于是
进程就"分叉"了,所以这个名字取得很形象。fock 的语法:
# include <unistd.h>
pid_t pid;
pid=fork();
调用 fork 时,系统将创建一个与当前进程相同的进程。他与原有的进程具有相同的数据、
连接关系和在程序同一处执行的连续性。通常将原有的进程称为父进程,而把新生成的进程称
为子进程。子进程是对父进程的复制,子进程获得同父进程相同的数据,但是同父进程使用不
同的数据段和堆栈段。
Fork 调用将执行两次返回,从父子进程分别返回。如果 pid=0,则说明从子进程返回的,否
则是从父进程返回的,此时返回的是子进程的 ID 号。可以在某一进程中调用 getpid()函数来
得到该进程的 ID 号。


进程的终止:
在 Linux 环境中,一个进程的结束,可以调用相应的函数实现也可以是接收到某个信号而
结束 。
1.# include <stdlib.h>
void exit(int status)
exit 函数是标准 C 中提供的函数,它用来终止正在运行的程序,他将关闭所有被该文件打
开的文件描述符。
2. void abort(void)
调用 abort 函数将产生 SIGABRT 信号,该信号使进程非正常结束。
还可以通过 ps 查看进程的 ID 号,然后使用 kill 命令如某进程的 pid=19056;则使用命令# kill 19056 来杀死 ID 号为 19056 的进程
调用 kill 命令时缺省产生的信号为 SIGTERM.

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
main()
{
   pid_t pid;
pid=fork();
if (pid<0)
   
   {
printf("fork is wrong\n");
exit(1);
   }
        else if (pid == 0)
          {
while (1)
   {
       printf("the child process is running now.pid=%d\n",getpid());

       sleep(1);//linux 的延时函数,延时 1 秒
   }
      }
else
   {
      while (1)
{
     printf("the perent process is running now.pid=%d\n",getpid());
     sleep(1);
}
   }
return 0;
}


1.输入命令编辑程序 # vi process.c。将上边的程序敲进程序。

2.编译程序 # gcc process.c –o process。生成可执行文件 process。

3.运行程序 # ./process 查看结果。


结果:

父子进程循环运行
the child process is running now.pid=19336
the perent process is running now.pid=19335
the child process is running now.pid=19336
the perent process is running now.pid=19335
the child process is running now.pid=19336
the perent process is running now.pid=19335

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值