社区
Linux/Unix社区
帖子详情
/proc/进程号文件夹/cmdline 中的红色字符是什么东西?
Sleeper_Color
2014-09-20 10:55:44
上图保存的是传入one这个程序的参数(系统保存的),我也在传参数之前将参数保存了一份并写在txt文档里。
问题是:当用cat命令查看cmdline这个文件显示的内容跟txt文档里是一样的(但是cmdline显示的内容没有回车,后面紧跟命令输入提示),但如果把这两个文档内容保存到string类型字符串里,再用==比较,二者不相等。
各位大神有知道应该怎么解决的吗?
或者说可以告诉我 这个 “\00” 是什么?
求教啊。。。。。
...全文
505
3
打赏
收藏
/proc/进程号文件夹/cmdline 中的红色字符是什么东西?
上图保存的是传入one这个程序的参数(系统保存的),我也在传参数之前将参数保存了一份并写在txt文档里。 问题是:当用cat命令查看cmdline这个文件显示的内容跟txt文档里是一样的(但是cmdline显示的内容没有回车,后面紧跟命令输入提示),但如果把这两个文档内容保存到string类型字符串里,再用==比较,二者不相等。 各位大神有知道应该怎么解决的吗? 或者说可以告诉我 这个 “\00” 是什么? 求教啊。。。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sleeper_Color
2014-10-02
打赏
举报
回复
非常感谢,我试一试
Cody2k3
2014-09-21
打赏
举报
回复
\00就是真的0啊,因为proc fs下cmdline的处理是一个个连续的以NULL(0)结尾的string 举个例子 $ksh -c "sleep 600" $cat cmdline ksh-csleep 600$ 显示raw byte $cat cmdline |od -tx1 0000000 6b 73 68 00 2d 63 00 73 6c 65 65 70 20 36 30 30 0000020 00 0000021 如果想要替换这些0,也很简单,比如换成空格,外加一个换车 $cat cmdline |tr \\000 ' '|sed -e "s/ \$/\n/" ksh -c sleep 600 $
Sleeper_Color
2014-09-20
打赏
举报
回复
linux
进程
监控和
进程
守护程序
主要功能: 1.读取配置文件程序 2.启动
进程
3.监控
进程
,查看
进程
是否退出或者崩溃 4.若
进程
退出或者崩溃,重启程序。 5.支持sleep功能 6.
进程
若连续崩溃NUM_MAX次就进行相应的睡眠周期struct
proc
_struct
proc
: struct
proc
_ struct [mp: if(array) return 0 ∥切换到目录rse chdirldiri ifdp= opendir(dir}=NuLL}开日录/
proc
,矢败返回0,成功把描述指针返回给d return o 〃将φpro
文件夹
的描述符指针传递给reεddir,读取
文件夹
内容,循环赋值给结构体di while ((dirp= readdir(dp))= NULLY char data 301 ∥取文件名称赋值给数组daa(其
中
包含有
进程
的名称(pid sprintf(data, "s", dirp->d_name); ∥是否是由
字符
09组成的
字符
串,即得到所有
进程
的pid f((IsDigit(data)) prac =(struct
proc
_struct )4 malloc(sizeof(struct
proc
_struct) tmp
proc
: prac->pid =a: oi(dirp->d_name): It(
proc
tind(
proc
. array)) free( tmp); closedir(dp cturn
proc
_find 两个参数分别是两个
进程
描述的结构体指针 李比较两个
进程
pd是否相等 李*相等返回1,不相等返回0 幸率球事容球家草事家事球峰率享事球摩率球享享溶事*事卷寒球套事塞容寒/ int
proc
find( struct prcc_struct* src, struct
proc
- struct* dest) char buffer[40%6]. ps
cmd
[20] It fd. I sprintf(buffer, "ed/star", sre->pid); fd = open(butter, O_RDONLY) if(fd==-1) rerurn 0 memset(buffer, wO, sizeof(buffer)) len= read(fd, bufter, sizeof(bufter )-1) close(ld) if(l return 0: p= butter: p= strrchr(p, C) narq=strrchr(p, )) n=q-p-1 if (len >= sizeof, srt->name)) len= sizeof(src->name)-1 p+ l, len src->namelen]=0; =日 turn(strcmp( src->name, dest dest->name)==0)? 1: 0- 条善参数aay:让程结构体指针;参数sie
进程
列表数组aray的大小ie:配置文件路径 从配置文件得到指定的程序列表,将对应
进程
的信息填充到aray数组
中
羋执行成功返回
进程
个数,执行失败返回0 int get_
proc
( struct
proc
_struct array, int size, char file intnRet=o if(! array I‖(si 0)l‖fhle myprinttf"invalid parameterin retun o char
line
[4096]; FILE fp= fopen(file, T"); if(fp) printf("open file cs fail\n", file) return U memset(
line
, 0, 4095); while(fgets(lire, 4095, tp)&& nRet size) memcpy(void s)[(&arraylnRet )->
cmd
line
), (void")
line
, strlen(
line
)-2 ) tmp= strrchr(
line
, / ) Lmp += I: memcpy((&array inRet))->name, tmp, strlen(tmp)- 2) nRet++ ); return(nReL); 康棒串串浓凉率旅浓串底率卖毒志着旅浓浓准溶房表 装 start
Proc
*卷参数
proc
:要启动的进的结构体描述指针 启动程序 执行成功返回1,子
进程
退出 宗塞家康家家家家家家家家宋家家聚家苯家球察塞家塞家家容家塞家家家家室家家察家家家聚家聚寒撑家装家掌建察家家室事 int start
Proc
(struct
proc
_ struct*
proc
, struct
proc
_struct*must_run_
proc
int mIst_run_size static inti=d if(
proc
)return 0 if(strlen(
proc
->
cmd
line
I<=0) return 0; int pid= forko: 〃
进程
内部返回值为0,返回给父
进程
的为自己的pid inta〓 if(pid pid= fork( ifpd≡0 execl(char")
proc
->
cmd
line
,(char")prDc->name,NULL); ∥exit: It(o): sleep42片 waiL(NULL) sleep( I: if(i== must run size -1) if(check
proc
(&must run
proc
[i])==0) start
Proc
( &mtust_run_proeli], must_run_prce, must_run_size); el if(i== must run size-11 i= else 1++ start
Proc
( &must_run_
proc
lil, must_run_
proc
, mustrun_ _size); !**幸幸串率幸米幸*家*幸毕零*幸幸半字幸字华米*幸半孝率非幸零幸学幸幸车 3a*8*daemon init 幸*启动配置文件当
中
的需要守护的程序 执行成功返回1,
中
途出错,返回-1 长界零家墨军零家零率家三哮零座零率零零容岸军零罕型率零零零零牢察座察零零零零季球军零容零 int moniter_ run(struct
proc
_struct"must_run_
proc
, int
proc
_ size) nti=0: for(i=0; i< must_run_size: i ++) ∥监控程序是否正在运行 if(check_
proc
(&(must un_
proc
[il))<=o) ∥厘新片动程序 start
Proc
(&' must run
proc
li]), must run
proc
,
proc
size return I: 幸*事率事率率**率**字幸学摩*率*幸幸学幸半*率幸字****幸
中
*幸学幸 春*着*信
号
处理函数 exit_
proc
翥安全结束监控的程序 4来没有返回值 告参毒萨响幸帝称昨嗜幸古称索点响卷南都南请南幸难布际本啪昨青市南动南香请非市赤南本 void exit_
proc
(int ar InL I struct
proc
struct
proc
for(i=0; i< must run_ Size: i++)
proc
=&(must_run_
proc
[i]): kill(
proc
->pid, SIGTERM); exit flag=I exit(o): void exit_
proc
(int pid 要main L.获取程序列表2启动
进程
3.监控
进程
,若程序岀或崩溃,重新启动程序4.收到退 出信
号
,安全结束监控程序 成功返回1,失败返回0 零牢容容家容字家容容察*禁容容字哮零常字容容容家察容牢容零容容容容容牢字家客字容牢容零容*字容客字容容字容家容容字岩 static void run moniter( void data) 读取程序列表 must_ run _size get
proc
(must_run_
proc
, sIZE, data if(rmust run Sizc <=1) return o struct sigaction act, oldact act,sa handler= exit_
proc
act. sa flags =SA ONESHOT sigaction(SIGTERM, &act, NULL) sigaction(SIGINT, &act, NULL) sigaction(sIGHUP, &act, NULL); 检测并启动未启动的程序 moniter_ run(must run
proc
, must run slze) eturn null int creat and run moniter(char * file) 开线程: pthread_t moniter_ thread if(pthread_create(&moniter_thread, NULL, run_moniter, file)==0) printf("thread create Ok, check thread start \n") return printf( thread check create Errin"): return -I 零零零零享享事职增零半非寥零享半容零摩率率零享剩率容半半享零半率零半率零率辱寒零享 要 IsDigit 参茶爹数a
字符
串的地址 *判断
字符
串是否有纯数字
字符
组成 春客是纯数字返回1,不是纯数字返回0 喜非要串思率串串串串家串润串串串串串串毒毒喜串串最率毒串串踪串率串串非球毒串妆串串毒串串影零串串毒事串 static int IsDigit[char aD) Int size ∥得到当前
字符
串的长度 size= strlen(a: ∥若
字符
串长度为0,则直接返回0:即宇符串为空则返回0: if(size ==0) return 0; ∥循环遍历整个
字符
串 forli=0; i< Size; i++) ∥如果
字符
小于
字符
0,或者大于
字符
9,则返回0 if(ai]<ol ai>9) retum ∥走到这一步说明
字符
串由
字符
09组成,返回1 return l; 主
进程
源文件:man,c main.c #include"
proc
ess, h Include <stdio. h> include <stdlib h> 甲 include< unistd. I> 甲 nclude< signal> 却 nclude <sys/ ypes,h include <sys/stat. h> 甲 include< tenth> int main(void) creat_and_run_moniter("
proc
listini") while(l) sleep(D) turn 以上内容是程序全部源文件
proc
目录下的
进程
目录
Proc
是一个虚拟文件系统,在Linux系统
中
它被挂载于/
proc
目录之上。
Proc
有多个功能 ,这其
中
包括用户可以通过它访问内核信息或用于排错,这其
中
一个非常有 用的功能,也是Linux变得更加特别的功能就是以文本流的形式来访问
进程
信息。很Linux命令(比如 ps、toPpstree等)都需要使用这个文件系统的信息。在/
proc
文件系统
中
,每一个
进程
都有一个相应的
文件夹
:/
proc
/pid,在该
文件夹
下会
进程
的相关信息
cmd
line
/
proc
/[pid]/
cmd
line
是一个只读文件,包含.
Linux内核:
进程
管理——
进程
文件系统 /
proc
详解
proc
目录
中
包含许多以数字命名的子目录,这些数字表示系统当前正在运行
进程
的
进程
号
,里面包含对应
进程
相关的多个信息文件。上面列出的是/
proc
目录
中
一些
进程
相关的目录,每个目录
中
是当程本身相关信息的文件。下面查找一个go的
进程
saslauthd的相关文件,其
中
有些文件是每个
进程
都会具有的,后文会对这些常见文件做出说明。1.1、
cmd
line
— 启动当前
进程
的完整命令,但僵尸
进程
目录
中
的此文件不包含任何信息;1.2、cwd — 指向当前
进程
运行目录的一个符
号
链接;
Linux下 /
proc
文件夹
内容解析(/
proc
文件系统解析)
/
proc
是一个伪文件系统, 被用作内核数据结构的接口, 而不仅仅是解释说明/dev/kmem. /
proc
里的大多数文件都是只读的, 但也可以通过写一些文件来改变内核变量. 下面对整个 /
proc
目录作一个大略的介绍. [number] 在 /
proc
目录里, 每个正在运行的
进程
都有一个以该
进程
ID 命名的子目录, 其下包括如下的目录和伪文件: [number] /
深入理解/
proc
/pid
进程
目录
Linux 内核提供了一种通过
proc
文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。
proc
文件系统是一个伪文件系统,它只存在内存当
中
,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过
proc
得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如
进程
,是动态改变的,所以用户或应用程序读取
proc
文件时,
proc
文件系统是动态从系统内核读出所需信息并提交的。
Linux/Unix社区
18,829
社区成员
11,501
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 专题技术讨论区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章