在linux下,如何用C语言执行 ps -ef | grep server > tmp.txt 这种命令。
3条回答 默认 最新
关注 首先写一个system的应用函数,search_process函数接收两个参数,我在你的命令的基础上加了 grep -v grep.。意思就是输出结果中,去掉grep命令本身。这样如果只有一个进程,结果中使用wc -l(小写的L)肯定是由一行
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int search_process(char * proc_name,char *dst_file) { int ret; int len = strlen(proc_name) + strlen(dst_file) + 100; char *buf = (char *)malloc(len); if(strlen(proc_name) == 0 || strlen(dst_file) == 0){ printf("invalid parameter,%s,%s,%p,%p\n", proc_name,dst_file,proc_name,dst_file); return -1; } printf("%s %s\n",proc_name,dst_file); sprintf(buf,"ps -ef | grep %s | grep -v grep > %s",proc_name,dst_file); ret = system(buf); printf("system(%s) = %d\n",buf,ret); free(buf); return ret; } int main(int argc,char *argv[]) { if(argc < 2){ while(1){ sleep(1); } } if(argc == 3) search_process(argv[1],argv[2]); printf("bye\n"); return 0; }
测试结果
编译csdn@ubuntu:~$ gcc main.c
运行
csdn@ubuntu:~$ ./a.out a.out dst.txt a.out dst.txt system(ps -ef | grep a.out | grep -v grep > dst.txt) = 0 bye csdn@ubuntu:~$
查看生成的目标文件
csdn@ubuntu:~$ cat dst.txt csdn 62473 62227 0 10:15 pts/20 00:00:00 ./a.out a.out dst.txt csdn@ubuntu:~$
从结果中,可以到搜索到了进程,这种方法可以判断进程的唯一性,不重复运行。
如果a.out不加参数,那么它就是一个测试进程可像下面这样使用:csdn@ubuntu:~$ ./a.out & [1] 62497 csdn@ubuntu:~$ ./a.out a.out dst.txt a.out dst.txt system(ps -ef | grep a.out | grep -v grep > dst.txt) = 0 bye csdn@ubuntu:~$ cat dst.txt csdn 62497 62227 0 10:18 pts/20 00:00:00 ./a.out csdn 62498 62227 0 10:18 pts/20 00:00:00 ./a.out a.out dst.txt csdn@ubuntu:~$
现在就有两个进程在同时运行了,如果系统检测到这种情况就需要留意了。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 Python 如何安装 distutils模块
- ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
- ¥15 资源泄露软件闪退怎么解决?
- ¥15 CCF-CSP 2023 第三题 解压缩(50%)
- ¥30 comfyui openpose报错
- ¥20 Wpf Datarid单元格闪烁效果的实现
- ¥15 图像分割、图像边缘提取
- ¥15 sqlserver执行存储过程报错
- ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
- ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出