linux 实验求助

linux 实验求助,第1张

实验报告

实验名称: Linux观察行为

实验时间:年 月 日

实验人员: (姓名) (学号) (年级)

实验目的: 掌握监视系统的几个Linux基本命令以及其他常用命令,学习linux内核,进程,存储和其他资源的一些重要特征,熟悉/proc虚拟文件系统。

实验环境: linux

实验步骤:

1. 用帐户root,密码123456登陆linux系统

2. 运行ps、man ps、cal、date、clear、who、which命令,观察输出结果

3. 运行/proc文件系统的相关命令(参见以下实验陈述3),观察输出结果

实验陈述:

1、基础知识:

为什么说/proc是一个虚拟文件系统:

proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。

该文件的作用:

它以文件系统的方式为访问系统内核数据的 *** 作提供接口。用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。

2、写出下列运行指令的结果(在终端里原样输入命令即可得到结果)

cal: 返回当前年月日历

who am I:返回当前用户信息

find /usr -name "clear":

返回 一直到/clear的路径 如:/use/bin/clear

which ls: alias ls='ls --color=tty'

/bin/ls

3、完成下列liunx机器问题(/proc文件系统)

² CPU的类型和型号

Ø指令:cat /proc/cpuinfo

Ø结果:(原样输入指令即可得到结果)

² 使用的Linux内核版本、编译器版本

Ø指令:cat /proc/version

Ø结果:(原样输入指令即可得到结果)

² 配置了多少内存

Ø指令:cat /proc/meminfo

Ø结果:

MemTotal项就是总的内存.

² 当前有多少可用内存

Ø指令:cat /proc/meminfo

Ø结果:

MemFree项就是可用内存.

² 有多少磁盘读写请求

Ø指令:cat /proc/stat

Ø结果:

disk_io项

² 从系统启动以来已经创建了多少进程

Ø指令:cat /proc/stat

Ø结果:

processes项即为总的线程数

实验总结:...

查看所有进程:

1.ps -ef

2.ps -aux

e = all processes 显示所有进程

f = full全格式

a = show processes for all users 显示所有用户的进程

u = display the process's user/owner 显示用户

x = also show processes not attached to a terminal 显示无控制终端的进程

查看单个进程是否运行:

ps -ef|grep 进程

ps -aux|grep 进程

ps -ef显示参数详解:

UID 用户ID

PID 进程ID

PPID 父进程ID

C CPU占用率

STIME 开始时间

TTY 开始此进程的TTY

TIME 此进程运行的总时间

CMD 命令名

ps -aux显示参数详解:

PID 进程的ID

PPID 父进程

%CPU 进程占用的CPU百分比

%MEM 占用内存的百分比

NI 进程的NICE值,数值大,表示较少占用CPU时间

VSZ 进程虚拟大小

RSS 驻留中页的数量

TTY 终端ID

STAT 进程状态(有以下几种)

D 无法中断的休眠状态(通常 IO 的进程)

R 正在运行可中在队列中可过行的

S 处于休眠状态

T 停止或被追踪

W 进入内存交换(从内核2.6开始无效)

X 死掉的进程(从来没见过)

Z 僵尸进程

<优先级高的进程

N 优先级较低的进程

L 有些页被锁进内存

s 进程的领导者(在它之下有子进程)

l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)

+ 位于后台的进程组

WCHAN 正在等待的进程资源

START 启动进程的时间

TIME 进程消耗CPU的时间

COMMAND 命令的名称和参数

ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的如果想对进程时间监控,应该用 top 工具.

定义

In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie.

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。

如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程?

#ps -ef | grep defunct

或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。

另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。

Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

top命令中也统计了僵尸进程。或者使用下面的命令:

ps -ef | grep defunct | grep -v grep | wc -l

如何杀死僵尸进程呢?

一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9

kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`

当然您可以自己编写更好的shell脚本,欢迎与大家分享。

我将nova-novncproxy stop后再start,僵尸进程即消失,问题解决。

另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

如何避免僵尸进程呢?

处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的 *** 作设为SIG_IGN。

signal(SIGCHLD,SIG_IGN)

这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程

或者

用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7362584.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存