2.13實驗記錄

c環境下
一、linux下

zombie2.c

#include<stdio.h>
#include<stdlib.h>
int main(){
        int i=0;
        int p=fork();
        if(p==0){
                sleep(5);
                printf("\nchild pid:%d,ppid:%d\n",getpid(),getppid());
        }
        if(p>0){
                printf("\nparent pid:%d,ppid:%d\n",getpid(),getppid());
                while(1){
                        sleep(1);
                        i++;
                }
        }
        return 0;
}

運行

gcc zombie2.c -o zombie2.out
./zombie2.out

在這裏插入圖片描述
ctrl+z掛起父進程,然後top查看,可以看見一個zombie

定位殭屍進程

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz] '

在這裏插入圖片描述
中止殭屍進程(殺死父進程以徹底結束殭屍進程)

kill -9 ppid

在這裏插入圖片描述
2.docker下
dockerfile

FROM gcc:latest
ADD zombie2.out /
CMD ["./zombie2.out"]

建立容器

docker build -t dockerfile .

docker ps查看container id

docker exec -it container_id /bin/bash
./zombie2.out

top查看,zombie進程數量爲0
在這裏插入圖片描述

kill -9 父進程並重啓,再次top查看
在這裏插入圖片描述
和linux下同樣一個zombie進程

生成多個殭屍進程

#include<stdio.h>
#include<stdlib.h>
int main(){
        int i=0;
        while(i<10){
                i++;
                int p=fork();
                if(p==0){
                        sleep(1);
                        printf("\nchild pid:%d,ppid:%d",getpid(),getppid());
                        return 0;
                }
        if(p>0){
                }
        }
        while(1){
                sleep(10);
                i++;
        }
        return 0;
}

在這裏插入圖片描述

python環境下
生成一個殭屍進程

#! /usr/bin/python
import os,time

p=os.fork()
if p==0:
      time.sleep(1)
      print("\nchild pid:%d,ppid:%d\n",os.getpid(),os.getppid())

if p>0:
      print("parent pid:%d,ppid:%d",os.getpid(),os.getppid())
      while 1:
        time.sleep(10)

在這裏插入圖片描述

生成很多殭屍進程

#! /usr/bin/python
import os,time

i=0
while(i<10):
        i=i+1
        p=os.fork()
        if p==0:
                time.sleep(1)
                print("\nchild pid:%d,ppid:%d\n",os.getpid(),os.getppid())
        if p>0:

                while(1):
                        time.sleep(10)

在這裏插入圖片描述
只有最後一個進程變成了殭屍,因爲每一個新的子進程都會變成下一個子進程的父進程
在這裏插入圖片描述

#! /usr/bin/python
import os,time

i=0
while(i<10):
        i=i+1
        p=os.fork()
        if p==0:
                time.sleep(1)
                print "child pid:%d,ppid:%d\n" % (os.getpid(),os.getppid())
        if p>0:
                print "parent pid:%d,ppid:%d\n" % (os.getpid(),os.getppid())
while(1):
        time.sleep(10)

完全無法生成殭屍

docker下
用python鏡像生成一個容器,把生成殭屍和監測cpu的程序拷貝上去
docker cp 源地址 容器:目標地址

docker cp /root/codes/zomebietest/test.py mypython:/myapps/zombietest/

啓動容器並運行殭屍程序
在這裏插入圖片描述
ctrl+z中斷後top查看
在這裏插入圖片描述
用pythoncpu.py讀取不到信息,top查看發現殭屍進程的cpu使用率是0,所以-bi讀取不到,改成-b
要在docker中查看文件需要安裝vim,apt-get install vim如果報錯,則先apt-get update

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章