Linux下C语言开发(已知进程名得到其PID号)
2014-12-09 17:50
423 查看
在我的另外一个篇博客【Linux下C语言开发(信号signal处理机制)】中需要测试系统调用kill来向指定进行号发送指定的信号,在同一个测试文件很容易获取当前进程的pid,只需调用getpid()函数就可获取当前进程的pid。但是,如果要获取非当前进程的pid,那应该如何获取呢?即我们需要在Linux C 程序中,已知其他进程的名字,来获取其进程的pid。此时此刻我只能百度了,上网百度,找到两种可行的方法:
1、通过popen创建一个管道,执行shell命令并得到返回结果
2、通过搜素/proc文件夹下的文件内容,得到进程PID(这里也可以学习下Linux C中如何读取一个文件夹中的内容)
为了方便测试,随便创建l一个progress.c文件,文件内容如下:
保存后,输入gcc progress.c -o progress将代码编译为二进制文件progress,并使用./progress运行。当我们运行progress,由于程序中加了for(;;);死循环,这样此进行就一直在运行着,方便我们来获取progress进程的pid。
一、通过popen的方法
我们知道,在shell下可以通过下述命令来得到进程progress的pid:
ps -e | grep 'test' | awk 'print $1'
(注意:这个命令中,名字中含有progress字样的进程都会被扫描到,如果只针对名字恰好为progress的进程,则需要修改这个命令)
那么在Linux C 程序中,只要将这个命令移到shell环境中执行一下,并读取其执行结果即可。在Linux C 程序中执行shell命令可以通过popen函数,该函数会返回一个文件指针,可以向操作文件一样对这个返回的指针进行操作。
创建一个getOtherProgreessPid.c文件,文件内容如下:
保存后,输入gcc getOtherProgreessPid.c -ogetOtherProgreessPid将代码编译为二进制文件getOtherProgreessPid,并使用./getOtherProgreessPid运行
二、通过搜素/proc文件夹下的内容获取进程pid
在系统的/proc文件夹下,保存有系统当前所有进程的信息,比如一个进程的pid为10000,那么/proc下会有一个名字为10000的文件夹,其中包含该进程的几乎所有信息:其中/proc/10000/cmdline文件中保存了启动该进程时使用的命令行。
由于刚才的进程是通过./progress运行的,因此只要遍历/proc下的文件夹,如果发现某个文件夹中的cmdline文件内容为./progress,则该文件夹的名字即为该进程的pid。
重新新建了一个getOtherProgreessPid2.c,其getOtherProgreessPid2.c文件内容如下:
保存后,输入gcc getOtherProgreessPid2.c -o getOtherProgreessPid2将代码编译为二进制文件getOtherProgreessPid2,并使用./progress先运行progress进程,后在另外一个终端中使用./getOtherProgreessPid2运行getOtherProgreessPid2进程
1、通过popen创建一个管道,执行shell命令并得到返回结果
2、通过搜素/proc文件夹下的文件内容,得到进程PID(这里也可以学习下Linux C中如何读取一个文件夹中的内容)
为了方便测试,随便创建l一个progress.c文件,文件内容如下:
保存后,输入gcc progress.c -o progress将代码编译为二进制文件progress,并使用./progress运行。当我们运行progress,由于程序中加了for(;;);死循环,这样此进行就一直在运行着,方便我们来获取progress进程的pid。
一、通过popen的方法
我们知道,在shell下可以通过下述命令来得到进程progress的pid:
ps -e | grep 'test' | awk 'print $1'
(注意:这个命令中,名字中含有progress字样的进程都会被扫描到,如果只针对名字恰好为progress的进程,则需要修改这个命令)
那么在Linux C 程序中,只要将这个命令移到shell环境中执行一下,并读取其执行结果即可。在Linux C 程序中执行shell命令可以通过popen函数,该函数会返回一个文件指针,可以向操作文件一样对这个返回的指针进行操作。
创建一个getOtherProgreessPid.c文件,文件内容如下:
保存后,输入gcc getOtherProgreessPid.c -ogetOtherProgreessPid将代码编译为二进制文件getOtherProgreessPid,并使用./getOtherProgreessPid运行
二、通过搜素/proc文件夹下的内容获取进程pid
在系统的/proc文件夹下,保存有系统当前所有进程的信息,比如一个进程的pid为10000,那么/proc下会有一个名字为10000的文件夹,其中包含该进程的几乎所有信息:其中/proc/10000/cmdline文件中保存了启动该进程时使用的命令行。
由于刚才的进程是通过./progress运行的,因此只要遍历/proc下的文件夹,如果发现某个文件夹中的cmdline文件内容为./progress,则该文件夹的名字即为该进程的pid。
重新新建了一个getOtherProgreessPid2.c,其getOtherProgreessPid2.c文件内容如下:
保存后,输入gcc getOtherProgreessPid2.c -o getOtherProgreessPid2将代码编译为二进制文件getOtherProgreessPid2,并使用./progress先运行progress进程,后在另外一个终端中使用./getOtherProgreessPid2运行getOtherProgreessPid2进程
相关文章推荐
- Linux下C语言开发(已知进程名得到其PID号)
- Linux开发已知进程名字获取PID号(C语言)
- 由PID得到进程名
- bat 批处理 开始进程 得到pid 杀死进程 计算器
- 得到父进程的PID
- Linux下C语言开发(多任务编程之任务、进程、线程)
- 启动java并得到当前进程的pid
- 已知进程pid获取其父进程pid
- 读proc/pid得到进程名称
- Linux下C语言开发(进程控制编程——wait()、waitpid())
- Nokia开发平台2.0(包含S80 2.0、S60 2.0和S40 2.0)已知问题V2.1(翻译)
- NokiaS40和S60开发平台1.0已知问题(翻译)
- 再谈进程PID相同的深入探究
- 杀死已知应用程序名的进程
- 再谈进程PID相同的深入探究
- 无进程DLL木马的又一开发思路与实现(转载)
- 改善开发进程 微软谈新Visual Studio(zz)
- 如何得到其它进程的启动命令行参数
- 如何得到其它进程的启动命令行参数 (转)
- 从进程ID得到句柄