如何解决在 Linux 上使用管道获取用户的进程
我正在尝试编写一个代码,将参数 1 作为您想要查看其进程使用的用户的名称,我使用管道通过 getent 获取用户,然后将结果传递给 greep argv[1] 到在该结果中搜索参数的用户,然后将其传递给 ps -fu 以获取该用户的进程,但我只获取了 user1(主用户)的进程,我不知道为什么,谢谢。
int nightModeFlags = getContext().getResources().getConfiguration().uiMode &
Configuration.UI_MODE_NIGHT_MASK;
switch (nightModeFlags) {
case Configuration.UI_MODE_NIGHT_YES:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
break;
case Configuration.UI_MODE_NIGHT_NO:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
break;
}
解决方法
哇..这对我来说太高级了..我以前和我一起工作过:
ps 辅助 | grep -v 根| grep nginx |剪切 -d\ -f1 |排序 |优衣库 ps辅助| grep -v 根| grep 阿帕奇 |剪切 -d\ -f1 |排序 |唯一
谢谢你的灵感..
,两个管道足够了,一个用于 ps aux,另一个用于 grep 用户过滤结果
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define error(a) {perror(a); exit(1);};
int main(int argc,char *argv[])
{
if(argc != 2){error("Incorrect number of arguments")};
int pfd[2],pid;
char user[100];
sprintf(user,"%s",argv[1]);
if (pipe(pfd) == -1) error("pipe");
printf("parent: pipe created,channels: READ=%d and WRITE=%d\n",pfd[0],pfd[1]);
switch (pid = fork()) {
case -1: error("fork");
case 0: /* 1st child: who */
printf("1st child process created\n");
if (close(1) == -1) error("close");
if (dup(pfd[1]) != 1) error("dup");
close(pfd[0]); close(pfd[1]);
execlp("ps","ps","aux",NULL);
error("execlp");
}
printf("parent: ps(%d) process launched\n",pid);
switch (pid = fork())
{
case -1: error("fork");
case 0: /* 2nd child process: wc -l */
printf("2nd child process created\n");
if (close(0) == -1) error("close");
if (dup(pfd[0]) != 0) error("grep");
close(pfd[0]); close(pfd[1]);
execlp("grep","grep",user,NULL);
error("execlp");
}
printf("parent: grep(%d) process launched\n",pid);
close(pfd[0]); close(pfd[1]);
while ((pid = wait(NULL)) != -1)
{
printf("parent: %d process finished\n",pid);
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。