linux下如何监视一个程序退出,并能让它自动

linux下如何监视一个程序退出,并能让它自动,第1张

把你的雀散兄程序启动顷袭方式写到/etc/inittab中。

如:

SAM0:2345:respwan:/home/app/bin/app >/dev/null 2>/tmp/掘桥stderr.app

所以,有时候对进程进行实时监控,当发现进程挂掉时,立刻重新启动进程,也是一种可以救急的方式(当然这个只是一种临时救急,并不是根本解决方法)。

实现方式:使用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_processint i = 0while(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系统对运行的进程数量有限制,如果产生过多的僵尸进程占用了可用的进程号,将会导致新的进程无法生成。这就是僵尸进程对系统的最大危害。

1.根据进程号进行查询:

# pstree -p 进程号

# top -Hp 进程号

2.根据进程名字进行查询:

# pstree -p `ps -e | grep server | awk '{print $1}'做答`

# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l

这里利用了管道和命令替换,

关于命令替换,我也是今天才了解,就是说用``括起来纯禅慧的命令会优袭胡先执行,然后以其输出作为其他命令的参数,

上述就是用 ps -e | grep server | awk '{print $1}' 的输出(进程号),作为 pstree -p 的参数

管道和命令替换的区别是:

管道:管道符号"|"左边命令的输出作为右边命令的输入

命令替换:将命令替换符"``"中命令的输出作为其他命令相应位置的参数


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

原文地址: http://outofmemory.cn/yw/12385451.html

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

发表评论

登录后才能评论

评论列表(0条)

保存