Команда: ps -c -p | tr -s " " | cut -d " " -f 2,6-10,13 | grep 'R'
Я запускаю ее через оболочку adb.По сути, мне нужен список процессов (и определенных параметров), которые в данный момент находятся в очереди выполнения.Это работает нормально, если я запускаю его непосредственно через оболочку.
Однако, если я помещаю его в программу на C и кросс-компилирую для запуска на Android, он не работает.Работает только ps -c -p
(я проверял это).Но при запуске этого ps -c -p | tr -s " " | cut -d " " -f 2,6-10,13 | grep 'R'
я получаю вывод:
usage: tr [-cds] SET1 [SET2]
Translate, squeeze, or delete characters from stdin, writing to stdout
-c/-C Take complement of SET1
-d Delete input characters coded SET1
-s Squeeze multiple output characters of SET2 into one character
tr: Needs 1 argument
usage: cut OPTION... [FILE]...
Print selected parts of lines from each FILE to standard output.
-b LIST select only these bytes from LIST.
-c LIST select only these characters from LIST.
-f LIST select only these fields.
-d DELIM use DELIM instead of TAB for field delimiter.
-s do not print lines not containing delimiters.
-n don't split multibyte characters (Ignored).
cut: Needs -fcb
Я думаю, что вывод ps -c -p
не передается tr
, который не передает его cut
.Подскажите, пожалуйста, в чем проблема?
Вот код, который я использую:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 128
int main(int argc,char **argv)
{
char *cmd4 = "ps -c -p | tr -s " " | cut -d " " -f 2,6-10,13 | grep 'R'";
system(cmd4);
FILE *fp;
char buf[BUFSIZE];
// Another method
if ((fp = popen(cmd4, "r")) == NULL) {
printf("Error opening pipe4!\n");
return -1;
}
while (fgets(buf, BUFSIZE, fp) != NULL) {
// Do whatever you want here...
printf("cmd 4 running!");
printf("OUTPUT: %s", buf);
}
if(pclose(fp)) {
printf("Command not found or exited with error status4\n");
return -1;
}
return 0;
}