嵌入式 一个进程获取另一个指定名称进程的PID
2013-12-04 20:52
363 查看
1、我们可以直接使用管道获取
ps u | awk '/\.\/sigrecevice$/{print $2}'
注意:转义字符打印的时候需要两次转义:打印“\t” 为“\\t”
2、如果想获取之后保存在变量中,则实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#define __DEBUG__
#ifdef __DEBUG__
#define msg_print(...) printf(__VA_ARGS__)
#else
#define msg_print(...)
#endif
#define MAX_VALUE_LEN 32
int joseph_get_name_pid(const char *key, char *value);
int joseph_get_name_pid(const char *key, char *value)
{
FILE *stream = NULL;
char cmd[64] = {0};
char buf[8] = {0};
if(NULL == key || 0 == strlen(key)){
msg_print("invalid parameter!\n");
return -1;
}
strcpy(buf,"\\.\\/");
printf("%s %d The buf is %s\n",__FUNCTION__,__LINE__,buf);
//sprintf(cmd, "ps u | awk '/%s$/{print $2}' | sed -n '1p'",key);
sprintf(cmd, "ps u | awk '/%s%s$/{print $2}'",buf,key);
msg_print("cmd = %s\n",cmd);
stream = popen(cmd,"r");
if(fread(value, sizeof(char), MAX_VALUE_LEN, stream) <= 0){
pclose(stream);
return -1;
}
strcpy(value + strlen(value) - 1, "\0");
msg_print("%s = %s\n", key, value);
pclose(stream);
return 0;
}
int main(int argc,char *argv[])
{
char value[32] = {0};
int name_pid = 0;
if(argc != 2)
{
printf("%s %d The param is two !\n",__FUNCTION__,__LINE__);
return -1;
}
joseph_get_name_pid(argv[1] ,value);
if(strlen(value) == 0)
{
printf("%s %d The %s is not running !\n",__FUNCTION__,__LINE__,argv[1]);
return -1;
}
name_pid = atoi(value);
printf("%s %d The pid is %s(char) ,the pid length is %d !\n",__FUNCTION__,__LINE__,value,strlen(value));
printf("%s %d The pid is %d(int) !\n",__FUNCTION__,__LINE__,name_pid);
return 0;
}
ps u | awk '/\.\/sigrecevice$/{print $2}'
注意:转义字符打印的时候需要两次转义:打印“\t” 为“\\t”
2、如果想获取之后保存在变量中,则实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#define __DEBUG__
#ifdef __DEBUG__
#define msg_print(...) printf(__VA_ARGS__)
#else
#define msg_print(...)
#endif
#define MAX_VALUE_LEN 32
int joseph_get_name_pid(const char *key, char *value);
int joseph_get_name_pid(const char *key, char *value)
{
FILE *stream = NULL;
char cmd[64] = {0};
char buf[8] = {0};
if(NULL == key || 0 == strlen(key)){
msg_print("invalid parameter!\n");
return -1;
}
strcpy(buf,"\\.\\/");
printf("%s %d The buf is %s\n",__FUNCTION__,__LINE__,buf);
//sprintf(cmd, "ps u | awk '/%s$/{print $2}' | sed -n '1p'",key);
sprintf(cmd, "ps u | awk '/%s%s$/{print $2}'",buf,key);
msg_print("cmd = %s\n",cmd);
stream = popen(cmd,"r");
if(fread(value, sizeof(char), MAX_VALUE_LEN, stream) <= 0){
pclose(stream);
return -1;
}
strcpy(value + strlen(value) - 1, "\0");
msg_print("%s = %s\n", key, value);
pclose(stream);
return 0;
}
int main(int argc,char *argv[])
{
char value[32] = {0};
int name_pid = 0;
if(argc != 2)
{
printf("%s %d The param is two !\n",__FUNCTION__,__LINE__);
return -1;
}
joseph_get_name_pid(argv[1] ,value);
if(strlen(value) == 0)
{
printf("%s %d The %s is not running !\n",__FUNCTION__,__LINE__,argv[1]);
return -1;
}
name_pid = atoi(value);
printf("%s %d The pid is %s(char) ,the pid length is %d !\n",__FUNCTION__,__LINE__,value,strlen(value));
printf("%s %d The pid is %d(int) !\n",__FUNCTION__,__LINE__,name_pid);
return 0;
}
相关文章推荐
- Linux获取监听指定端口的进程PID
- linux下ss命令源码学习(二):linux c代码获取后台进程名称及pid
- 根据进程名称获取进程pid,结束进程,执行exe文件
- shell获取上一个进程的PID
- 编写一个任务管理器/进程获取/PID获取
- [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)
- [Win32]获取指定进程的父进程PID
- 怎么通过反射的方式获取指定变量名称的值呢?比如说一个const类型的常量:const string aa=123
- shell获取当前进程pid和上一个进程pid
- linux: 获取监听指定端口的进程PID
- cmd下获取指定进程名的pid号,并通过taskkill结束该进程
- 如何通过进程pid获取进程名、可执行文件的名称
- ndk获取Android进程PID和名称
- 使用python获取系统所有进程PID以及进程名称
- linux下获取指定exe进程pid和详细信息的命令
- [Win32]获取指定进程的父进程PID
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- Python获取系统所有进程PID及进程名称的方法示例
- linux获取一个进程pid的父进程的两种方法
- [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)