介绍
本篇内容介绍了“Linux下查看进程信息的途径以及更改进程名的方式”的有关知识,在实际案例的操作过程中,不少人就会碰到这样的窘境,接出来就让小编率领你们学习一下怎样处理这种情况吧!希望你们仔细阅读,才能学有所成!
序言
Linux下查看进程信息的途径一般有以下几种方法
途径说明,ps等命令通过ps及中级命令查看进程信息时,只能查到相对路径,查不到的进程的详尽信息,如绝对路径等。常用命令如下
ps-查看所有进程名称,
pef接显示进程绝对路径及参数;
ps辅助显示所有用户进程状态,最后一列显示进程绝对路径及参数;
中级命令参考文件夹Linux在启动一个进程时,系统会在/proc下创建一个以pid命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过我或ls-l命令即可查看.exe实际运行程序的符号链接;
cmdline一个只读文件linux查看进程名称,包含进程的完整命令行信息;
通信包含进程的命令名;
慢性消耗病进程当前工作目录的符号链接;
状态进程状态信息,包含的信息少于统计;
统计进程状态信息;
慢性消耗病进程当前工作目录的符号链接;
延后显示什么代码导致的延时比较大;
环境记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号联接。
中级隐藏篇介绍以下两种形式更改隐藏进程名
之前1只通过更改进程argv[0]更改进程名通过2只通过Linuxprctl更改进程名
一、通过更改进程argv[0]更改进程名
优点是psef,ps辅助看不到进程名及参数了
缺点是这些方式仅仅是更改了/prco/pid/cmdline的值linux查看进程名称,使用ps-或则最高命令还是可以看见进程名称
我们晓得在一个程序中,参数的个数保存在int型命令行参数个数中,参数保存在链表argv[]中,链表的第一个元素argv[0]保存的就是进程名,第二个元素argv[1]保存的是第一个参数,依次类推。通过更改进程argv[0]更改进程名linux查看硬件信息,这一方式实现比较简单,我们只要在进程启动面函数中更改掉argv字段所指向的显存空间的内容即可,这儿须要注意的是linux中主要()还有一个隐藏参数就是环境变量信息linux系统装win7,储存了运行时所须要的环境变量,
假如新名称比argv[0]的厚度小,我们可以直接更改,并把多余的部份请0
假如新名称比argv[0]长我们须要两步
1)申请新显存保存环境变量信息和argv[1…argc-1]参数信息
2)更改argv[0],将新名称往前到环境的最后一项清0
以下示例代码仅仅是将argv[]清空
# include & lt; stdio.h> # include & lt; unistd.h> # include & lt; stdlib.h> # include & lt; string.h> 命令行参数个数,int 主要(int char * * argv), { ,,,printf (“==========, Before 从而modification ============ n"); ,,,printf (“ProcessName: % s n",, argv [0]); ,,,(int 小姐:=,1;,小姐:& lt;,命令行参数个数;,小姐:+ +){ ,,,,,,,printf (“Argv % d: % s n",,我,,Argv[我]); ,,,} ,,,/*,Start 从而modification */,,,int new_argc =,命令行参数个数; ,,,char * *, new_argv =, malloc((命令行参数个数+ 1),*,sizeof (* new_argv)); ,,,(int j =, 0;, j & lt;,命令行参数个数;,j + +) ,,,{ ,,,,,,,size_t length =, strlen (argv [j]), +, 1; ,,,,,,,new_argv [j],=, malloc(长度); ,,,,,,,memcpy (new_argv [j], argv [j],,长度); ,,,,,,,memset (argv [j], & # 39; 0 & # 39;,,长度); ,,,} ,,,printf (“==========, After 从而modification ============ n"); ,,,printf (“ProcessName: % s n",, argv [0]); ,,,(int 小姐:=,1;,小姐:& lt;,命令行参数个数;,小姐:+ +){ ,,,,,,,printf (“Argv % d: % s n",,我,,Argv[我]); ,,,} ,,,printf (“==========, Copy data ============ n"); ,,,printf (“ProcessName: % s n",, new_argv [0]); ,,,(int k =, 1,, k & lt;, new_argc;, k + +) { ,,,,,,,printf (“Argv % d: % s n",, k, new_argv [k]); ,,,} ,,,睡眠(1000); ,,,return 0; }
二,通过通过Linuxprctl更改进程名
优点是更改了/prco/pid/统计及/prco/pid/状态中的进程名称,使用ps-或则最高命令看不到原先的进程名称Linux下查看进程信息的途径以及更改进程名的方式