进程和信号

1.进程标识符(PID):通常是一个取值从2~32768的正整数

  数字1一般是为特殊进程Init保留的,Init进程负责管理其他进程

2.进程有自己的栈空间,用于保存函数中的局部变量和控制函数的调用和返回

   进程有自己的环境空间,包含专门为这个进程建立的环境变量

   进程还必须维护自己的程序计数器,用来记录它执行到的位置

3.启动新进程的方法

  a.库函数system方式: system("ps ax")

  b.替换进程映像的exec系列函数: exec函数把当前进程替换为另一个新进程,新进程由path和file参数指定。 execl("/bin/ps","ps","ax",0)

    execl() / execlp() / execle()

    execv() / execvp() / execve() 

  c.复制进程映像的fork()函数:fork函数复制当前进程,在进程表中创建一个新的表项,新表中的许多属性与当前进程是相同的。新进程和原进程几乎一模一样,执行的代码也完全一样,担心进程有自己的数据空间、环境和文件描述符。

    pid_t newpid

    newpid = fork();

4.等待一个进程wait

  int sta_val;

  pid_t child_pid;

  child_pid = wait(&sta_val);    //wait返回子进程Pid, sta_val显示子进程执行的状态信息

 

5.信号

  信号是UNIX和Linux系统响应某些条件而产生的一个事件

  生成\捕获\响应\忽略

  信号名称在signal.h中定义的,都以SIG开头。

6.核心转储文件core

  如果进程接收到某些信号,但事先没有安排捕获他,进程将会立刻停止。通常,系统将生成核心转储文件core,并将其放在当前目录下。该文件是进程在内存中的映像,他对程序的调试很有用处。

7.常用信号名称

SIGABRT        进程异常终止    6
SIGALRM        超时告警    
SIGFPE        浮点运算异常
SIGHUP        连接挂断
SIGILL        非法指令
SIGINT        终端中断   2
SIGKILL        停止进程(此信号不能被忽略或捕获)
SIGPIPE        向没有读的管道写入数据
SIGSEGV        无效内存段访问
SIGQOUT        终端退出    3
SIGTERM        终止
SIGUSR1        用户定义信号1
SIGUSR2        用户定义信号2
SIGCHLD        子进程已经停止或退出
SIGCONT        如果被停止则继续执行
SIGSTOP        停止执行
SIGTSTP        终端停止信号
SIGTOUT        后台进程请求进行写操作
SIGTTIN        后台进程请求进行读操作

8.signal函数简介

signal函数作用是 给某个信号signum注册一个信号处理函数handler
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
signal函数
    作用1:站在应用程序的角度,注册一个信号处理函数
    作用2:忽略信号,设置信号默认处理 信号的安装和回复
参数
--signal是一个带signum和handler两个参数的函数,准备捕捉或屏蔽的信号由参数signum给出,接收到指定信号时将要调用的函数有handler给出
--handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是void
--handler也可以是下面两个特殊值:① SIG_IGN 屏蔽该信号        ② SIG_DFL 恢复默认行为

 

posted @ 2018-04-03 19:33  qxgloyal  阅读(119)  评论(0)    收藏  举报