Linux -进程-孤儿进程-僵尸进程-预防僵尸进程

  Linux常见进程命令:

 ps 查看系统中的进程 如:ps -af   ps -ef 
 top 动态的现实系统中的进程 
 nice  按用户的指定的优先级运行
 renice 改变正在运行的进程的优先级 
 crontab 用于安装、删除或者列出用于驱动cron后台驱动 
 kill 终止进程 
 bg 将挂起的进程放到后台执行

 

  
  
  
  
  1. # include <unistd.h> 
  2. # include <sys/stat.h> 
  3. # include <sys/types.h> 
  4. # include <fcntl.h> 
  5. # include <stdio.h> 
  6. # include <stdlib.h> 
  7. # include <string.h> 
  8.   
  9. # define ERR_EXIT(m) \ 
  10.     do \ 
  11.     { \ 
  12.         perror(m); \ 
  13.         exit(EXIT_FAILURE); \ 
  14.     }while(0) 
  15.   
  16. int main(int argc,char *argv[]) 
  17.     signal(SIGCHLD,SIG_IGN); 
  18.     printf("before fork pid = %d\n",getpid()); 
  19.     pid_d pid; 
  20.     pid = fork(); 
  21.     if(pid == -1) 
  22.     { 
  23.         ERR_EXIT("fork error"); 
  24.     } 
  25.      
  26.     if(pid > 0) 
  27.     { 
  28.         printf("this is parent  pid =%d childpid = %d\n",getpid(),pid); 
  29.         sleep(1);        
  30.     } 
  31.     else if (pid == 0)/*此为父进程*/ 
  32.     { 
  33.         printf("this is child pid=%d parentpid = %d\n",getpid(),getppid()); 
  34.     }
  35.  
  36.  
  37. return 0;    
  38.  

 

 

 

fork() 一次调用两次返回

fork()成功,创建了一个进程副本,意味着有两个进程了,

fork(),两次返回是在不同的地址空间返回的,是在各自的进程地址空间返回的、

 

A

fork();

A'

 

 

fork系统调用后,父子进程交替进行

孤儿进程,父进程先结束,留着子进程

托孤给1号进程也就是 init,父进程变成了 init

defunct  僵尸进程,不可能处于活跃状态

子进程先退出,父进程还未查询子进程的退出状态,此时子进程就处于僵尸状态

 

避免僵尸进程的方法:

子进程结束时发生信号给父进程

# include <signal.h>

signal(SIGCHLD,SIG_IGN);

 

 

父进程先退出,子进程就成为孤儿进程,父进程变成了1号进程

子进程先退出,父进程尚未查询子进程的状态,成为僵尸进程

 

 

 

代码段+数据段+PCB

代码段可以共享

写时复制copy on write

 

 

 

需要的malefile文件:

.PHONY:clean all

CC=gcc

CFLAGS=-Wall -g

BIN=01cop

all:$(BIN)

%.O:%.c

$(CC) %(CFLAGS) -c $< -o  $@

clean:

rm -f *.o $(BIN)

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,进程)