导航:首页 > 编程系统 > 进程监控linux

进程监控linux

发布时间:2022-09-17 01:48:12

⑴ 如何查看linux系统的进程监控日志

/var/log/*.log
如果日志在更新,如何实时查看 tail -f /var/log/messages
还可以使用 watch -d -n 1 cat /var/log/messages
-d表示高亮不同的地方,-n表示多少秒刷新一次。
该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容,这一特性,对于查看日志是非常有效的。如果想终止输出,按 Ctrl+C 即可。

在Linux系统中,有三个主要的日志子系统:
连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
进程统计--由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。

常用的日志文件如下:
access-log 纪录HTTP/web的传输

acct/pacct 纪录用户命令

aculog 纪录MODEM的活动

btmp纪录失败的纪录

lastlog纪录最近几次成功登录的事件和最后一次不成功的登录

messages从syslog中记录信息(有的链接到syslog文件)系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一

sudolog 纪录使用sudo发出的命令

sulog 纪录使用su命令的使用

syslog 从syslog中记录信息(通常链接到messages文件)

utmp纪录当前登录的每个用户

wtmp一个用户每次登录进入和退出时间的永久纪录

xferlog 纪录FTP会话
/var/log/secure与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp.7。

每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。

下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。

具体命令
wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。

who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示

chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
ynguo pts/3 Aug 18 13:55
lewis pts/4 Aug 18 13:35
ynguo pts/7 Aug 18 14:12
ylou pts/8 Aug 18 14:15

如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。
w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。
USER TTYFROM LOGIN@ IDLE JCPU PCPUWHAT
chyang pts/0 202.38.68.2423:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
lewis pts/3 202.38.64.2331:55pm 30:39 0.27s 0.22s -bash
lewis pts/4 202.38.64.2331:35pm 6.00s 4.03s 0.01s sh /home/users/
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail
yloupts/8 202.38.64.2352:15pm 1:09m 0.10s 0.04s-bash

users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。例如:users(回车)显示:chyang lewis lewis ylou ynguo ynguo

last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:
chyang pts/9202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfanpts/6202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
chyang pts/4202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
lewis pts/3202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
lewis pts/2202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)

如果指明了用户,那么last只报告该用户的近期活动,例如:last ynguo(回车)显示:
ynguopts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
ynguopts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
ynguopts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
ynguopts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)
ynguopts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)
ynguopts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)
ynguopts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)

ac:ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时),如果不使用标志,则报告总的时间。例如:ac(回车)显示:total 5177.47
ac -d(回车)显示每天的总的连结时间
Aug 12 total 261.87
Aug 13 total 351.39
Aug 14 total 396.09
Aug 15 total 462.63
Aug 16 total 270.45
Aug 17 total 104.29
Today total 179.00

ac -p (回车)显示每个用户的总的连接时间
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
zjzhu 52.87
zqzhou 13.14
liangliu 24.34
total 5178.22

lastlog:lastlog文件在每次有用户登录时被查询。可以使用lastlog命令来检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示"**Never logged**。注意需要以root运行该命令,例如:

rong5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000

另外,可一加一些参数,例如,lastlog -u 102将报告UID为102的用户;lastlog -t 7表示限制上一周的报告。

⑵ linux下如何监听进程

一、supervise

Supervise是daemontools的一个工具,可以用来监控管理下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序。

使用:
mkdir test
cd test
vim run 写入希望执行的操作
supervise test (注意这里是的参数是run文件上层的文件夹,改变run的为可执行 chmod +x run)

二、monit

monit是一个小型的开放源码工具来管理和监控Unix系统。Monit可以自动维护进程,及时避免进程异常退出等产生的问题。

系统: monit可以监控问题的发生,包括进程状态、系统cpu负载、内存占用情况等,例如当apache服务的cpu负载以及内存闸弄情况过高时候,它会重启apache服务。
进程: monit可以监控守护进程,包括系统进程。例如当某个进行down掉,它会自动恢复重启该进程。
文件系统:Monit可以监控本地文件、目录、文件系统的变化,包括时间戳、校验值、大小的变化。例如,可以监控文件sha1以及md5的值,来监控文件是否发生变化。
网络:monit可以监控网络连接,支持TCP、UDP、Unix domain sockets以及HTTP、SMTP等。
定时脚本:monit可以用来定时测试程序和脚本,获取程序输出结果,进而判断是否成功或其他情况。
安装:

sudo apt-get install monit
编辑配置:
sudo vim /etc/monit/monitrc
启动、停止、重启:
sudo /etc/init.d/monit start
sudo /etc/init.d/monit stop
sudo /etc/init.d/monit restart
设置页面监控状态:
set httpd port 2812 and
allow 0.0.0.0/0.0.0.0
allow localhost
增加监控:
需要注意的是,这里需要添加start和stop,缺一个都是不行的

1.根据程序名称来监控

check process test with MATCHING test.py
start program = "/home/yxd/test.py"
stop program = "xxxxx"
2.根据pid监控

check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/rcWebServer.sh start https"
stop program = "/etc/init.d/rcWebServer.sh stop https"
if changed pid then aler
参考:用monit监控系统关键进程
supervisord

Supervisor是一个C/S系统,它可以在类unix操作系统让用户来监视和控制后台服务进程的数量。它是由python编写的,常用于进程异常退出的重启保护。
安装:

pip install supervisor
查看配置文件:

echo_supervisord_conf
从该命令的结果中,可以看到各个模块的配置信息。
创建配置文件:

echo_supervisord_conf > /etc/supervisord.conf
配置应用:

[program:test]
command=python /root/test_supervisor.py
process_name=%(program_name)s
stdout_logfile=/root/test.log
stderr_logfile=/root/test.log
保存,启动:

/usr/bin/supervisord -c /etc/supervisord.conf

⑶ 如何灵活运用Linux 进程资源监控和进程限制

你可以使用 mpstat 单独查看每个处理器或者系统整体的活动,可以是每次一个快照或者动态更新。
为了使用这个工具,你首先需要安装 sysstat:
# yum update && yum install sysstat [基于 CentOS 的系统]
# aptitutde update && aptitude install sysstat [基于 Ubuntu 的系统]
# zypper update && zypper install sysstat [基于 openSUSE 的系统]

你可以在 Linux 中学习 Sysstat 和其中的工具 mpstat、pidstat、iostat 和 sar,了解更多和 sysstat 和其中的工具相关的信息。
安装完 mpstat 之后,就可以使用它生成处理器统计信息的报告。
你可以使用下面的命令每隔 2 秒显示所有 CPU(用-P ALL 表示)的 CPU 利用率(-u),共显示3次。
# mpstat -P ALL -u 2 3

示例输出:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March 2016 _x86_64_ (4 CPU)

11:41:07 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:09 IST all 5.85 0.00 1.12 0.12 0.00 0.00 0.00 0.00 0.00 92.91
11:41:09 IST 0 4.48 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 94.53
11:41:09 IST 1 2.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 97.00
11:41:09 IST 2 6.44 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 92.57
11:41:09 IST 3 10.45 0.00 1.99 0.00 0.00 0.00 0.00 0.00 0.00 87.56

11:41:09 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:11 IST all 11.60 0.12 1.12 0.50 0.00 0.00 0.00 0.00 0.00 86.66
11:41:11 IST 0 10.50 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 88.50
11:41:11 IST 1 14.36 0.00 1.49 2.48 0.00 0.00 0.00 0.00 0.00 81.68
11:41:11 IST 2 2.00 0.50 1.00 0.00 0.00 0.00 0.00 0.00 0.00 96.50
11:41:11 IST 3 19.40 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 79.60

11:41:11 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:13 IST all 5.69 0.00 1.24 0.00 0.00 0.00 0.00 0.00 0.00 93.07
11:41:13 IST 0 2.97 0.00 1.49 0.00 0.00 0.00 0.00 0.00 0.00 95.54
11:41:13 IST 1 10.78 0.00 1.47 0.00 0.00 0.00 0.00 0.00 0.00 87.75
11:41:13 IST 2 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
11:41:13 IST 3 6.93 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 92.57

Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 7.71 0.04 1.16 0.21 0.00 0.00 0.00 0.00 0.00 90.89
Average: 0 5.97 0.00 1.16 0.00 0.00 0.00 0.00 0.00 0.00 92.87
Average: 1 9.24 0.00 1.16 0.83 0.00 0.00 0.00 0.00 0.00 88.78
Average: 2 3.49 0.17 1.00 0.00 0.00 0.00 0.00 0.00 0.00 95.35
Average: 3 12.25 0.00 1.16 0.00 0.00 0.00 0.00 0.00 0.00 86.59

要查看指定的 CPU(在下面的例子中是 CPU 0),可以使用:
# mpstat -P 0 -u 2 3

示例输出:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March 2016 _x86_64_ (4 CPU)

11:42:08 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:42:10 IST 0 3.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 96.50
11:42:12 IST 0 4.08 0.00 0.00 2.55 0.00 0.00 0.00 0.00 0.00 93.37
11:42:14 IST 0 9.74 0.00 0.51 0.00 0.00 0.00 0.00 0.00 0.00 89.74
Average: 0 5.58 0.00 0.34 0.85 0.00 0.00 0.00 0.00 0.00 93.23

上面命令的输出包括这些列:
CPU: 整数表示的处理器号或者 all 表示所有处理器的平均值。
%usr: 运行在用户级别的应用的 CPU 利用率百分数。
%nice: 和 %usr相同,但有 nice 优先级。
%sys: 执行内核应用的 CPU 利用率百分比。这不包括用于处理中断或者硬件请求的时间。
%iowait: 指定(或所有)CPU 的空闲时间百分比,这表示当前 CPU 处于 I/O 操作密集的状态。
%irq: 用于处理硬件中断的时间所占百分比。
%soft: 和%irq相同,但是是软中断。
%steal: 虚拟机非自主等待(时间片窃取)所占时间的百分比,即当虚拟机在竞争 CPU 时所从虚拟机管理程序那里“赢得”的时间。应该保持这个值尽可能小。如果这个值很大,意味着虚拟机正在或者将要停止运转。
%guest: 运行虚拟处理器所用的时间百分比。
%idle: CPU 没有运行任何任务所占时间的百分比。如果你观察到这个值很小,意味着系统负载很重。在这种情况下,你需要查看详细的进程列表、以及下面将要讨论的内容来确定这是什么原因导致的。
运行下面的命令使处理器处于极高负载,然后在另一个终端执行 mpstat 命令:
# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3

最后,和 “正常” 情况下 mpstat 的输出作比较:

正如你在上面图示中看到的,在前面两个例子中,根据%idle的值可以判断 CPU 0 负载很高。
在下一部分,我们会讨论如何识别资源饥饿型进程,如何获取更多和它们相关的信息,以及如何采取恰当的措施。
Linux 进程报告
我们可以使用有名的ps命令,用-eo选项(根据用户定义格式选中所有进程) 和--sort选项(指定自定义排序顺序)按照 CPU 使用率排序列出进程,例如:
# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

上面的命令只会显示PID、PPID、和进程相关的命令、 CPU 使用率以及 RAM 使用率,并按照 CPU 使用率降序排序。创建 .iso 文件的时候运行上面的命令,下面是输出的前面几行:

一旦我们找到了感兴趣的进程(例如PID=2822的进程),我们就可以进入/proc/PID(本例中是/proc/2822) 列出目录内容。
这个目录就是进程运行的时候保存多个关于该进程详细信息的文件和子目录的目录。
例如:
/proc/2822/io:包括该进程的 IO 统计信息(IO 操作时的读写字符数)。
/proc/2822/attr/current:显示了进程当前的 SELinux 安全属性。
/proc/2822/cgroup:如果启用了 CONFIGCGROUPS 内核设置选项,这会显示该进程所属的控制组(简称cgroups),你可以使用下面命令验证是否启用了 CONFIGCGROUPS:
# cat /boot/config-$(uname -r) | grep -i cgroups

如果启用了该选项,你应该看到:
CONFIG_CGROUPS=y
根据红帽企业版 Linux 7 资源管理指南第一到四章的内容、openSUSE 系统分析和调优指南第九章、Ubuntu 14.04 服务器文档Control Groups 章节,你可以使用cgroups管理每个进程允许使用的资源数目。
/proc/2822/fd这个目录包含每个打开的描述进程的文件的符号链接。下面的截图显示了 tty1(第一个终端) 中创建 .iso 镜像进程的相关信息:

上面的截图显示 stdin(文件描述符 0)、stdout(文件描述符 1)、stderr(文件描述符 2) 相应地被映射到 /dev/zero、 /root/test.iso 和 /dev/tty1。
在 Linux 中为每个用户设置资源限制
如果你不够小心、让任意用户使用不受限制的进程数,最终你可能会遇到意外的系统关机或者由于系统进入不可用的状态而被锁住。为了防止这种情况发生,你应该为用户可以启动的进程数目设置上限。
你可以在 /etc/security/limits.conf 文件末尾添加下面一行来设置限制:* hard nproc 10
第一个字段可以用来表示一个用户、组或者所有人(*), 第二个字段强制限制可以使用的进程数目(nproc) 为 10。退出并重新登录就可以使设置生效。
然后,让我们来看看非 root 用户(合法用户或非法用户) 试图引起 shell fork 炸弹时会发生什么。如果我们没有设置限制, shell fork 炸弹会无限制地启动函数的两个实例,然后无限循环地复制任意一个实例。最终导致你的系统卡死。
但是,如果使用了上面的限制,fort 炸弹就不会成功,但用户仍然会被锁在外面直到系统管理员杀死相关的进程。

提示:limits.conf文件中可以查看其它 ulimit 可以更改的限制。
其它 Linux 进程管理工具
除了上面讨论的工具, 一个系统管理员还可能需要:
a) 通过使用 renice 调整执行优先级(系统资源的使用)。这意味着内核会根据分配的优先级(众所周知的 “niceness”,它是一个范围从-20到19的整数)给进程分配更多或更少的系统资源。
这个值越小,执行优先级越高。普通用户(而非 root)只能调高他们所有的进程的 niceness 值(意味着更低的优先级),而 root 用户可以调高或调低任何进程的 niceness 值。
renice 命令的基本语法如下:
# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

如果 new priority 后面的参数没有(为空),默认就是 PID。在这种情况下,PID=identifier 的进程的 niceness 值会被设置为<new priority>
b) 需要的时候中断一个进程的正常执行。这也就是通常所说的“杀死”进程。实质上,这意味着给进程发送一个信号使它恰当地结束运行并以有序的方式释放任何占用的资源。
按照下面的方式使用 kill 命令杀死进程:
# kill PID

另外,你也可以使用pkill结束指定用户(-u)、指定组(-G), 甚至有共同的父进程 ID (-P)的所有进程。这些选项后面可以使用数字或者名称表示的标识符。
# pkill [options] identifier

例如:
杀死组GID=1000的所有进程.
# pkill -G 1000

杀死PPID 是 4993的所有进程.
# pkill -P 4993

在运行pkill之前,先用pgrep测试结果、或者使用-l选项列出进程名称是一个很好的办法。它需要和pkill相同的参数、但是只会返回进程的 PID(而不会有其它操作),而pkill会杀死进程。
# pgrep -l -u gacanepa

⑷ 如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程

可以分三步来做:


  1. 做两个简单的守护进程,并能正常运行

  2. 监控进程是否在运行

  3. 启动进程


综合起来就可以了,代码如下:
被监控进程thisisatest.c(来自):
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>


void init_daemon()
{
int pid;
int i;
pid=fork();
if(pid<0)
exit(1); //创建错误,退出
else if(pid>0) //父进程退出
exit(0);

setsid(); //使子进程成为组长
pid=fork();
if(pid>0)
exit(0); //再次退出,使进程不是组长,这样进程就不会打开控制终端
else if(pid<0)
exit(1);


//关闭进程打开的文件句柄
for(i=0;i<NOFILE;i++)
close(i);
chdir("/root/test"); //改变目录
umask(0);//重设文件创建的掩码
return;
}


void main()
{
FILE *fp;
time_t t;
init_daemon();
while(1)
{
sleep(60); //等待一分钟再写入
fp=fopen("testfork2.log","a");
if(fp>=0)
{
time(&t);
fprintf(fp,"current time is:%s ",asctime(localtime(&t))); //转换为本地时间输出
fclose(fp);
}
}
return;
}


监控进程monitor.c:
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>


#include<sys/wait.h>
#include<fcntl.h>
#include<limits.h>


#define BUFSZ 150


void init_daemon()
{
int pid;
int i;
pid=fork();
if(pid<0)
exit(1); //创建错误,退出
else if(pid>0) //父进程退出
exit(0);


setsid(); //使子进程成为组长
pid=fork();
if(pid>0)
exit(0); //再次退出,使进程不是组长,这样进程就不会打开控制终端
else if(pid<0)
exit(1);


//关闭进程打开的文件句柄
for(i=0;i<NOFILE;i++)
close(i);
chdir("/root/test"); //改变目录
umask(0);//重设文件创建的掩码
return;
}


void err_quit(char *msg)
{
perror(msg);
exit(EXIT_FAILURE);
}


// 判断程序是否在运行
int does_service_work()
{
FILE* fp;
int count;
char buf[BUFSZ];
char command[150];
sprintf(command, "ps -ef | grep thisisatest | grep -v grep | wc -l" );


if((fp = popen(command,"r")) == NULL)
err_quit("popen");


if( (fgets(buf,BUFSZ,fp))!= NULL )
{
count = atoi(buf);
}
pclose(fp);
return count;
// exit(EXIT_SUCCESS);
}




void main()
{
FILE *fp;
time_t t;
int count;
init_daemon();
while(1)
{
sleep(10); //等待一分钟再写入
fp=fopen("testfork3.log","a");
if(fp>=0)
{
count = does_service_work();
time(&t);
if(count>0)
fprintf(fp,"current time is:%s and the process exists, the count is %d ",asctime(localtime(&t)), count); //转换为本地时间输出
else
{
fprintf(fp,"current time is:%s and the process does not exist, restart it! ",asctime(localtime(&t))); //转换为本地时间输出
system("/home/user/daemon/thisisatest"); //启动服务
}


fclose(fp);
}
}
return;
}


具体CMD命令:


cc thisisatest.c -o thisisatest
./thisisatest
cc monitor.c -o monitor
./monitor


tail -f testfork3.log -- 查看日志

⑸ 如何监控linux下的进程占用内存的情况

top
-n
10
前10个最耗资源的进程。
或者
linux下获取占用cpu资源最多的10个进程,可以使用如下命令组合:
ps
aux|head
-1;ps
aux|grep
-v
pid|sort
-rn
-k
+3|head

⑹ 如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程

可以分三步来做:
做两个简单的守护进程,并能正常运行
监控进程是否在运行
启动进程
综合起来就可以了,代码如下:
被监控进程thisisatest.c
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>

void init_daemon()

⑺ linux下监控进程是否挂掉的一种方法

所以,有时候对进程进行实时监控,当发现进程挂掉时,立刻重新启动进程,也是一种可以救急的方式(当然这个只是一种临时救急,并不是根本解决方法)。
实现方式:使用fork()创建子进程,子进程用于执行具体功能,主进程只是用于监控子进程,当主进程检测到子进程挂掉后,可以实现立即重新启动子进程。
子进程结束,系统会向主进程发送信号:SIGCHLD,主进程可以通过捕捉该信号,从而检测子进程已经不存在,进而继续下一步操作。如果需要,主进程还可以获得子进程是为何退出的。
源代码例子:#include#include#include#include#include#include#includevoid process_exit(int s){exit(0);}void child_fun(){printf("child_fun. ppid %d\n",getppid());
char *st = NULL;
strcpy(st, "123");}void fork_child(){pid_t child_process;
int status;
int signal_num;
wait(&status);//等待子进程中断或终止,释放子进程资源,否则死掉的子进程会变成僵尸进程
//如果子进程是由于某种信号退出的,捕获该信号
if(WIFSIGNALED(status))
signal_num = WTERMSIG(status);
child_process = fork();
if(child_process == 0){printf("fork new child process.\n");
child_fun();}}int main(){pid_t child_process;int i = 0;while(1){printf("fork new process.\n");
child_process = fork();
if(child_process > 0){while(1){//捕获子进程结束信号
signal(SIGCHLD, fork_child);
signal(SIGTERM, process_exit);
pause();//主进程休眠,当有信号到来时被唤醒。}}else if(child_process == 0){child_fun();}}return 0;}僵尸进程的产生:
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程如果没有给子进程收尸,死掉的子进程就变成僵尸进程了。僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间,它需要它的父进程来为它收尸。僵尸进程,无法正常结束,此时即使是root身份kill-9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
僵尸进程的危害:
Linux系统对运行的进程数量有限制,如果产生过多的僵尸进程占用了可用的进程号,将会导致新的进程无法生成。这就是僵尸进程对系统的最大危害。

⑻ linux 进程监控和自动重启脚本

ps -fe|grep X if [ $? -eq 0 ] then service restart X fi 然后把这段脚本放到crontab里面,每分钟执行一次就可以了

⑼ linux下如何实时监控每个进程的CPU和内存使用量,请有关有经验的人说说啊给分。

TOP命令,不能只监控进程的CPU和内存的使用量,并且也不能看到使用量总和,还专是用脚本吧,类型这样:

ps -aux|属grep java|awk '{print $6}'|awk 'BEGIN{SUM0=0}{SUM0+=$1} END{print SUM0/1024}'

就可以,CPU同样。

⑽ 如何linux下监控进程及其子进程占用资源

你可以使用 mpstat 单独查看每个处理器或者系统整体的活动,可以是每次一版个快照或者动态更新。 为了使权用这个工具,你首先需要安装 sysstat: # yum update && yum install sysstat [基于 CentOS 的系统] # aptitutde update

阅读全文

与进程监控linux相关的资料

热点内容
轻松备份专业版教程 浏览:658
移动网络2g怎么改成4g 浏览:634
linux设置字体大小 浏览:329
安全牛的linux 浏览:672
wps会缓存excel文件么 浏览:592
app开发phpjava哪个更好 浏览:53
app有十万用户是什么概念 浏览:285
g73车球头怎么编程的 浏览:940
数据库管理的优点是 浏览:617
安卓毫秒计时器 浏览:92
hmci模组找不到文件 浏览:348
可复制日语qq网名 浏览:586
电信大数据平台 浏览:348
如何输出一个json数据 浏览:274
未来的编程语言是什么 浏览:694
编程上path是什么意思 浏览:683
u盘外壳3d源文件 浏览:298
中小学如何有效开展编程教育 浏览:6
如何快速拷贝大文件 浏览:406
正柏网络是什么 浏览:834

友情链接