我需要能够通过此命令的输出进行grep。如果我在“完成”之后将其关闭,它会很好地工作,但是我无法搜索输出并且无法将其输出或使用grep。
在|
之后插入>>
或./binaryfile
似乎也不起作用。
for i in {0..32767}; do
printf "AAAAAAAAAAAAA\x$(printf %x $i)" | ./binaryfile;
killall -s KILL binaryfile;
done >> output.txt
我应该得到一个包含所有结果的可抓取文本文件。而是文件(或grep)完全为空。
答案 0 :(得分:0)
如果循环中的killall有所作为,我认为这意味着二进制文件程序没有正确终止,否则killall根本没有任何作用,并且会显示一条错误消息(没有这样的过程或类似的东西这个)。 因此,我认为一开始您应该尝试弄清楚为什么该过程无法正确终止。也许它在父进程在出口运行时启动子进程。如果您不能阻止它轻松地执行此操作,则可以尝试在bash脚本中同步您的进程,这样您就不会遇到太多进程的问题(在它们可以做一些有趣的事情之前将其杀死)解决问题)。
例如,如果编译并运行此脚本,则会注意到您得到一个shell提示,而程序仍输出消息:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void main(void) {
pid_t parent_pid;
pid_t my_pid;
long i,j;
parent_pid= getpid();
fork();
if(getpid() == parent_pid) {
printf("I'm the parent process, Ill terminate\n");
exit(1);
} else {
printf("I'm the child process, I'll live a bit longer\n");
for(i=0;i < 100;i++) {
printf("Iteration %ld\n", i);
for(j=0;j < 500000000; j++);
}
}
}
因此,我认为您需要同步您的进程或确保该程序已终止,然后才能再次启动它。似乎对于上面的示例,我不能使用wait(我的意思是shell命令),但是如果没有其他可能性,则可以在shell脚本中添加一些内容(例如,尽管我知道这有点尴尬):
while pgrep binaryfile > /dev/null ; do
sleep 2s
done