liunx上获取进程ID和启动参数的命令主要有以下两个:如ps –ef | grep mysql //查看mysql的进程;查看后台运行的进程;
查看用户的UID、GID及所归属的用户组--ps |grep 后面要加要找的进程。是列出主要的进程。而ps -aux|grep 列出所有的进程 并在其中查找
一般我们用ps -aux|grep 这个命令比较通用,前后台的程序都可以查找。
我们用管道来执行这个命令,并获取相关的信息,示例代码如下:
int Get_cmdline(void)
{
FILE* ptr;
char* tok = NULL;
char* m_sCommand = "ps -ax|grep 进程名";
int t_id = 0;//进程ID
char line[128] = {0};
/*Read data pipeline-----command of execution results*/
if (ptr = popen(m_sCommand, "r"))
{
while (fgets(line, sizeof(line), ptr) != NULL)
{
/*Find substring*/
/*STAT 进程状态(有以下几种)*D 无法中断的休眠状态(通常 IO 的进程);R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换(从内核2.6开始无效);
*X 死掉的进程(从来没见过);Z 僵尸进程;*优先级高的进程N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);
*+l 多进程的(使用CLONE_THREAD,类似 NPTL pthreads;+ 位于后台的进程组;*/
if(strstr(line,"l+") || strstr(line,"named.conf") || strstr(line,"l"))
{
/*find the parametel of cmdline */
tok = strstr(line,"/");
if(tok)
{
strcpy(temp,tok+1);
strcpy(namedline,strstr(temp,"/"));
/*find the id of named*/
sscanf(line,"%d",&t_id);
}
}
break;
}
pclose(ptr);
return SUCESS;/*Custom macro*/
}
else
{
return FAIL;
}
}