linux下用程序读取某进程的状态信息(/proc/[pid]/stat)时,该进程结束了。怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下用程序读取某进程的状态信息(/proc/[pid]/stat)时,该进程结束了。怎么办相关的知识,希望对你有一定的参考价值。

参考技术A /proc/中文件都是实时的 即你的进程结束指父进程,那么 /proc/中就不会再有该记录追问

其实问题是这样的,pid为10000的进程创建了一个子进程来监视自己的进程状态,但是子进程在读取成功/proc/10000/stat后,如果pid为10000的进程结束了,在取值的时候有时候会报错。有什么解决方法吗

追答

简单来说 10000进程信息已经不存在于/proc/10000中,你就不该再去取其值,而且那是取不到的,当然报错。 挂掉的进程在/proc没有记录 就是这样

参考技术B 不是很明白你想做什么,你的意思进程的死亡是非正常的?追问

我的意思是,比如正在查看pid为1000的进程的状态信息,由于linux下的状态信息都是以文件存在的,已经成功打开这个文件了,然后要去读取信息的时候,pid为1000的进程结束了,这样读它的/proc/1000/stat时就会报错。应该怎么解决这个问题。。。

追答

pid为1000的进程的父进程是不是由你控制

追问

不是,我的检测程序是pid为1000的子进程。当然pid为1000的程序可以由自己控制。

不是,我的检测程序是pid为1000的子进程。当然pid为1000的程序可以由自己控制。

不是,我的检测程序是pid为1000的子进程。当然pid为1000的程序可以由自己控制。

不是,我的检测程序是pid为1000的子进程。当然pid为1000的程序可以由自己控制。

追答

兄弟,我忙的不得了,要不我给你搞一下,你要是能等,等几天我帮你写一段程序

本回答被提问者采纳

Linux命令学习-ps命令

Linux中,ps命令的全称是process status,即进程状态的意思,主要作用是列出系统中当前正在运行的进程信息。

ps命令的功能很强大,参数也非常多,下面只举几个简单的实例。

  1. 显示所有进程信息
    ps -A
  2. 显示所有进程信息,包括其执行的命令
    ps -ef
  3. 显示指定用户下的所有进程信息
    ps -u wintest
  4. 查找指定进程:gogs
    ps -ef | grep gogs

一般情况下,当我们想要杀死某进程时,便可以通过ps命令找到其进程号pid,然后通过 kill -9 命令将该进程强制杀死。

以上是关于linux下用程序读取某进程的状态信息(/proc/[pid]/stat)时,该进程结束了。怎么办的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux下用C/C++语言操作数据库sqlite3

Linux下用awk获取某一行或某一列的查询结果

Linux下用GCC

Linux下用GCC程序修改/etc/profile文件环境变量的问题

linux函数的阻塞与非阻塞IO及错误处理

我在linux下用libevent编程,libevent安装到了/usr/lib目录下,但是写完程序总是报错说event.h找不到?