Результаты параллельных процессов записываются в один файл - PullRequest
2 голосов
/ 19 октября 2010

Я новичок в Linux и недавно был введен в "&".Мне нужно запустить несколько трассировок и сохранить их в одном файле, и мне интересно, смогу ли я запустить эти трассировки параллельно?

Я пробовал следующее, но результаты в сгенерированном файле не хранятся отдельно?Ну, это то, что мне кажется.

traceroute  -n -z 100 www.yahoo.com >> theLog.log &
traceroute  -n -z 100 www.abc.com >> theLog.log &

Возможно ли то, что я прошу сделать?Если да, то какие команды мне следует использовать?

Спасибо за любое направление.

Ответы [ 5 ]

1 голос
/ 19 октября 2010

Если вы хотите, чтобы он работал параллельно, лучше сохранить промежуточные результаты в отдельных файлах, которые они объединяют в конце.Шаги будут состоять в том, чтобы запустить каждую трассировку в файл журнала и сохранить их pid, дождаться их остановки, присоединить результаты, что-то вроде следующего:

traceroute  -n -z 100 www.yahoo.com > theLog.1.log & PID1=$!
traceroute  -n -z 100 www.abc.com > theLog.2.log & PID2=$!    
wait $PDI1 $PDI2    
cat theLog.1.log theLog.2.log > theLog.log
rm theLog.2.log theLog.1.log
1 голос
/ 19 октября 2010

Возможно, вы могли бы исследовать параллельно (и рассказать нам о своем опыте)?Если вы используете Ubuntu, вы можете набрать sudo apt-get install moreutils, чтобы получить parallel.

0 голосов
/ 22 октября 2010

traceroute с в ответе @ enzotib выполняются по одному в последовательности.

Вы можете выполнить traceroute с параллельно, используя @ rmk утилиту parallel .

$ /usr/bin/time parallel traceroute -n -z 100 <hosts.txt >> parallel.log
24.78user 0.63system 1:24.04elapsed 30%CPU (0avgtext+0avgdata 37456maxresident)k
72inputs+72outputs (2major+28776minor)pagefaults 0swaps

ПоследовательныйВ 5 раз медленнее:

$ /usr/bin/time ./sequential.sh 
24.63user 0.51system 7:19.09elapsed 5%CPU (0avgtext+0avgdata 5296maxresident)k
112inputs+568outputs (1major+8759minor)pagefaults 0swaps

Где sequential.sh:

#!/bin/bash
( while read host; do traceroute -n -z 100 $host; done; ) <hosts.txt >>sequential.log

И hosts.txt:

www.yahoo.com
www.abc.com
www.google.com
stackoverflow.com
facebook.com
youtube.com
live.com
baidu.com
wikipedia.org
blogspot.com
qq.com
twitter.com
msn.com
yahoo.co.jp
taobao.com
google.co.in
sina.com.cn
amazon.com
google.de
google.com.hk
0 голосов
/ 19 октября 2010

Как вы уже написали, поведение не определено.Вы можете попробовать опубликовать энзотиб или сделать так, чтобы каждый из них записывал в свой собственный файл, и в конце их можно объединить.

0 голосов
/ 19 октября 2010

С помощью следующей команды они на самом деле не параллельны, но вы можете продолжать использовать свой терминал, и результаты разбираются на части:

{ traceroute -n -z 100 www.yahoo.com; traceroute -n -z 100 www.abc.com; } >> theLog.log &
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...