模拟实现ps aux | grep xxx
模拟实现ps aux | grep xxx使用管道通信的功能
思路:子进程中执行ps aux,通过匿名管道通信传输给父进程,父进程中输出内容即可
整体代码:
pipe1.c:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc,char *argv[] ){//创建一个匿名管道 pipeint pipefd[2];int ret= pipe(pipefd);if(ret==-1){perror("pipe:");exit(-1);}//创建一个子进程 forkpid_t pid =fork();if(pid==0){//child process ps auxclose(pipefd[0]);//stdout_fileno -> pipeint rett= dup2(pipefd[1],STDOUT_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}//open ps aux and write pipe rett =execlp( "/bin/ps", "ps", "aux", NULL);if(rett == -1){perror("execl:");exit(-1);}close(pipefd[1]);}else if(pid > 0){//parent process read pipeclose(pipefd[1]);int rett= dup2(pipefd[0],STDIN_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}rett =execlp("grep", "grep", argv[1] ,NULL);if(rett == -1){perror("execl:");exit(-1);}close(pipefd[0]);}else{perror("fork:");exit(-1);}return 0;
}
作业说明:
编译指令:gcc pipe1.c
运行指令:./a.out XXX (XXX不可少)
XXX可以是bash nginx等等
例如:
下面记录一下我遇到的问题:
1.管道的重定向,根据老师的提醒,我将子进程的[标准屏幕输出(写到屏幕上)STDOUT_FILEON] 指向[pipepf[1](写到管道里)],如图:
int rett= dup2(pipefd[1],STDOUT_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}
但父进程依然按照老师的示例read以及printf,发现read:bad read报错终止,如下:
while (1){char buf[1024]={0};int retp= read(pipefd[0],buf,strlen(buf)-1);if(retp ==-1){perror("read:");exit(-1);}printf("%s",buf);}
后来想到将[标准读入(从键盘读入)]指向[从管道读入],问题方才解决,即:
int rett= dup2(pipefd[0],STDIN_FILENO);if(rett == -1){perror ("dup2:");exit(-1);}
2.子进程中执行ps aux,通过匿名管道通信传输给父进程,父进程中执行grep XXX,且输出内容,或者父进程生成两个子进程一个子进程执行ps aux,另一个子进程执行grep XXX,父进程可以回收子进程,这个已有其他的朋友写过,可参考,下面放链接:https://blog.csdn.net/zxy131072/article/details/89515930
模拟实现ps aux | grep xxx相关推荐
- linux命令ps -aux|grep xxx详解
linux命令ps -aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大 ...
- ps aux|grep xxx详解
linux命令ps aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的 ...
- linux xxx命令,linux命令ps aux|grep xxx详解
对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...
- ps -aux | grep xxx, kill -s 9, pgrep --Linux下进程
1. 可以用下面命令查看进程状态: ps -aux 只列出指定的进程: ps -aux | grep nmon 最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后 ...
- linux命令 ps aux | grep xxx详解
说明: 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而 ps命令 Process Status 就是最基本,同时也是非常强大的进程查看命令. 使用该命令 ,可以确定 ...
- linux命令ps aux|grep xxx
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在 ...
- linux命令ps aux|grep xxx详解
原文地址:https://www.cnblogs.com/robertoji/p/5555449.html 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令( ...
- linux aux是什么命令,linux命令ps aux|grep xxx详解
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在 ...
- ps aux|grep xxx
ps aux|grep tomcat ps:Process Status进程状态监控 -aux参数 -d:显示所有进程但是忽略会话引线 -a:显示一个终端的所有进程除了会话引线 -u:uid or u ...
最新文章
- No modifications are allowed to a locked ParameterMap
- 机械转电子工程嵌入式方向靠谱吗?怎么上手学习?
- pandas删除缺失数据(pd.dropna()方法)
- LNMP安装常见问题集锦(一)
- 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
- 想做“冲顶大会”?全球首套直播竞答解决方案来了!
- 文件 在线压缩 技术
- LintCode 402: Continuous Subarray Sum
- 项目优化经验——垃圾回收导致的性能问题
- linux环境生成weblogic密钥,Linux环境下创建weblogic服务.doc
- [Beego] [bootstrap-paginator]实现分页功能
- 当半个娱乐圈都在吃自嗨锅,方便面去哪儿了?
- 如何规划前端工程师职业发展路线?
- EasyTouch的使用
- springBoot的学习整理 摘抄蚂蚁课堂
- 基于蚁群算法的图像边缘检测
- 秃如其来第一步之安装JDK
- Tensorflow 神经网络模型架构
- 交换机的各种工作模式
- 百度图片推广广告位怎么做,图片广告位如何投放
热门文章
- ESP8266 RTOSSDK3.0 的工程同步到3.4
- K8S最新版本集群部署超详细(k8s版本1.5.1)docker 版本19.03.1以及基本操作和服务介绍。
- SitePoint播客#106:不要成为面巾纸
- 按键精灵_字符点阵制作
- mysql死锁的原因及解决方法_mysql死锁的原因及解决方法
- 文科生可报考那些计算机学校,文科生/600分以上可以报考哪些学校?
- 计算机软件与理论 算法,几种几何约束求解算法的分析-计算机软件与理论专业论文.docx...
- Javascript中公有成员,私有成员,静态成员
- android唱吧源码,Android版唱吧K歌王
- 后台获取前台传递参数为null和空字符串的区别,以及sql拼接之if判断