进程创建和进程终止

Solaris系统上的Sched进程理解进程的创建

名词对照小贴士

pid

进程标志符。大多数操作系统根据一个唯一的pid来识别进程pid通常是个整数。

Solaris

SunMicrosystems研发的计算机操作系统它被认为是UNIX操作系统的衍生版本之一

Sched

小红伞(Antivir)升级病毒库相关进程

pageout

内存换页守护进

fsflush

Solaris系统的一个后台内核守护进程。它周期性扫描内存并将文件系统高速缓存中已修改的页面写到磁盘

init

用户进程的根进程

inted

负责网络服务

dtlogin

表示用户登录界面

sdt_shel

当一个用户登录时,dtlogin会生成一个X-windows会话,它反过来又会生成sdt_shel进程

Shell

用户命令行


Solaris系统上Sched进程树:


通常进程需要一定的资源(CPU时间、内存、文件、I/O设备)来完成任务。在一个进程创建子进程时,子进程可以从操作系统那里直接获得资源,也可能只从父进程那里获得资源。

初始化数据由父进程传递给子进程。

当进程创建新进程时,有两种执行可能

   父进程与子进程并发执行

   父进程等待,知道某个或全部子进程执行完

新进程的地址空间也有两种可能

   子进程是父进程的复制品

   子进程装入另一个新的程序

UNIX系统中,使用fork()系统调用来创建新进程。新进程通过复制原来进程的地址空间而成,这种机制与许父子进程之间方便的通信。两个进程都执行位于系统调用fork()之后的指令。但是,子进程fork()返回0,父进程则返回子进程的标志符

通常,在系统调用fork()之后,一个进程会使用系统调用exec(),以用新程序来取代进程的内存空间。这种方式可以使两进程相互通信并按照个自的方法执行

如果父进程在子进程运行时没什么可,它将采用系统调用wait()把自己移出就绪队列来等待子进程终止。

一个UNIX创建进程的例子:

#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>

void main(int argc,char *argv[])
{
  pid_t pid;
  //fork a child process
  pid=fork();
  if(pid<0)
  {
    fprintf(stderr,"Fork Failed");
    exit(-1);
  }
  else if(pid==0)//child process
  {
    execlp("/bin/ls","ls",NULL);
  }
  else//parent process
  {
    wait(NULL);
    printf("Child Complete");
    exit(0);
  }
}


WindowsUNIX不同,使用的CreatProcess()创建新进程时需要传入至少10个参数(fork()不用传递参数)其中参数STARTUPINFO指明新进程的许多特性(窗口大小,标准输入和输出文件的句柄),参数PROCESS_INFORMATION包含新生成进程和线程的标识。

举个栗子:

CreatProcess(NULL,//应用名//如果应用名为空,命令行参数指明了要装入的应用

“C:\\WINDOWS\\system32\\mspaint.exe”,//命令行参数//装入了微软Windows中的mspaint.exe程序

NULL,//不继承进程句柄

NULL,//不继承线程句柄

FALSE,//关闭句柄继承

0,//指定不创建标志

NULL,//使用父进程已有的环境块

NULL,//使用父进程已有的目录

&si,//指向程序刚开始生成的STARTUPINFO指针

&pi//指向程序刚开始生成的PROCESS_INFORMATION指针
)

进程终止的情况

->当进程执行最后的语句使用exit()请求操作系统删除自身时,进程终止。此时进程可以返回状态值到父进程(过系统调用wait()),所有进程资源被操作系统释放。

->进程通过适当的系统调用能终止另一个进程。通常只有被终止进程的父进程才能执行这一系列调用。

   父进程终止子进程的原因

     1、子进程使用了超过它所分配的一些资源

     2、分配给子进程的任务已不再需要

     3、父进程退出,操作系统不再允许子进程继续(级联终止)

    UNIX系统中,如果父进程终止,那么其所有子进程会以init进程作为父进程,因此,子进程仍然有一个父进程来收集状态和执行统计。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值