LINUX下C++开发中遇到的问题

llf_hust 2005-08-18 10:20:43
在LINUX下面如何编程知道另一个程序是不是在运行,如果该程序没有运行则启动该程序让它运行。老板说可以用PID实现,但我不知道具体怎么实现。哪位哪手给个提示呀???
...全文
265 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jagen在路上 2005-08-21
  • 打赏
  • 举报
回复
当你进入/proc目录时,你会发现很多以10进制数为标题的目录,它们都是记录系统中正在运行的每个用户级进程的信息,数字表示进程号(pid)。/proc/self是当前进程目录的符号连接。这些目录下存放着许多有关进程信息的文件,比如status文件包含许多进程控制块(PCB)中的进程状态信息,用cat命令显示如下:
#cat /proc/self/status

Name: cat
State: R (running)
Pid: 8901
PPid: 8779
TracerPid 0
Uid: 0 0 0 0
Gid: 0 0 0 0
PDSize: 256
Groups: 0 1 2 3 4 6 10
VmSize: 1648 kB
VmLck: 0 kB
VmRSS: 508 kB
VmData: 36 kB
VmStk: 20 kB
VmExe: 16 kB
VmLib: 1312 kB
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigLgn: 8000000000000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff

在每个目录下,进程信息是类似的。/proc文件系统中进程相关目录的内容如下:

cmdline 该进程的命令行参数
cwd 进程运行的当前路径的符号连接
environ 该进程运行的环境变量
exe 该进程相关的程序文件的符号连接
fd 包含了所有进程中使用的文件描述符的目录
maps 可执行程序或者库文件对应的内存映像
mem 该进程使用的内存
root 该进程所有者的家(home)目录
stat 进程状态
statm 进程的内存状态
status 用易读的方式表示进程状态
llf_hust 2005-08-20
  • 打赏
  • 举报
回复
up
zjyu88 2005-08-19
  • 打赏
  • 举报
回复
恩啊...
运用PROC才是硬道理..呵...
而且你要运行一个程序最要不用SYSTEM()启动,,因为效率低,它是先启动终端的,,
建议先创建一个进程再使用EXEC函数系列去代替这新进程..
bugebear3 2005-08-19
  • 打赏
  • 举报
回复
同意楼上的,PROC里有系统运行的所有进程的信息
llf_hust 2005-08-19
  • 打赏
  • 举报
回复
我还是不知道在编程的过程中具体怎么样应用呀????
Jagen在路上 2005-08-19
  • 打赏
  • 举报
回复
proc就是proc目录阿,多简单,里面的文件你可以读出内容的。
zhousqy 2005-08-19
  • 打赏
  • 举报
回复
能不能在proc里找到点运行中的程序的线索?
jsjjms 2005-08-19
  • 打赏
  • 举报
回复
linux 下都忘光了,,,,,,学习...
cym64039 2005-08-19
  • 打赏
  • 举报
回复
写个shell不就可以了,再linux自带crontab每分钟运行一次
#!/bin/sh
demo=`ps -ef | grep 进程名 |grep -v grep | wc -l`
if [ $demo -lt 1 ]
then
cd path
运行程序
fi
SeaKing911 2005-08-19
  • 打赏
  • 举报
回复
怎么运用proc呢?能不能详细点啊?
希望之晨 2005-08-19
  • 打赏
  • 举报
回复
用ps或者在/proc下去找都可是实现不过不是好办法
还有就是用kill(。。。。。。)函数给进程号,如果知道进程号的话。
SeaKing911 2005-08-19
  • 打赏
  • 举报
回复
如果你能确定你要实现守护的程序的执行方法和路径的话,你可以放入一个配置文件中,然后定时每个1分钟或者多少时间去ps -ef|grep ***一下,判断返回的结果。如果有就不用管了,如果没有就system(***)一下了。大概是这样的。但是,这种方法不能很好的处理僵死进程的情况,如果各位有什么好办法,指点一下啊。
various 2005-08-18
  • 打赏
  • 举报
回复
或者这样 ,就是生成日志文件。读日志来判断是否有程序在运行
cenlmmx 2005-08-18
  • 打赏
  • 举报
回复
一些命令记不得了
cenlmmx 2005-08-18
  • 打赏
  • 举报
回复
能够这样:
char* call = "ps -ef|grep XXX >> 1.log"
excev(...,call,....)
调用,再来分析1.log
一些命令记的得了,就这个思路.
llf_hust 2005-08-18
  • 打赏
  • 举报
回复
up

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧