Как сделал этот '&' в конце моей команды, сделайте сценарий НАСТОЛЬКО быстро?

Похоже на необходимость в очень простом ответе. Так как Вы упомянули Alt+Tab, я предполагаю, что Вы используете окна (X). Вы выделяете команду с мышью перед нажатием "Enter". Это автоматически копируется в буфер обмена при выделении его. Для вставки его нажмите среднюю кнопку мыши (колесико прокрутки) или введите Shift+Insert.

18
04.04.2015, 15:25
2 ответа

Добавление и порождает фоновый процесс.

Если вы пишете A; B , он будет запустить команду , подождите, пока его закончите, затем запустить команду b , в последовательности.

Если вы пишете A & B , он будет вырезать A как фоновый процесс. Он не будет ждать, пока он закончится, и он начнет работать B . Он будет работать как сразу.

Вы можете увидеть, что он делает, экспериментируя в оболочке. Если у вас установлено x x x xterm - это хороший способ увидеть, что произойдет: набрав

$ xterm

, вызовет другое окно терминала, и первый будет ждать, пока вы не закроете его Отказ Только когда вы закрываете, вы получите вашу оболочку. Если вы напечатаете

$ xterm &

, то он будет запустить его в фоновом режиме, и вы получите свою оболочку немедленно, а окно xterm также останется открытым.

Так что, если вы пишете

echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt

, он делает соединение, отправляет строку, хранит то, что выходит в файл, и только затем перемещается на следующий.

Добавление & делает его не ждать. Это заканчивается все десять тысяч из них более или менее одновременно.

Ваш скрипт кажется «заканчивается» быстрее, потому что он, вероятно, на самом деле не закончил в то время. Просто сделали десять тысяч фоновых заданий, а затем закончились на переднем плане.

Это также означает, что в вашем случае он попытается открыть десять тысяч соединений более или менее одновременно. В зависимости от того, что другой конец может обрабатывать, некоторые из них могут потерпеть неудачу. Не только это, но нет никакой гарантии, что они будут бегать по порядку, на самом деле они почти наверняка не будут, так что на самом деле заканчиваются в /tmp/me/dump.txt .

Вы проверили, был ли вывод правильным?

30
27.01.2020, 19:46

Команда NC (NetCat) является дорогостоящим, временем мудро. Он должен подключиться к удаленному серверу, отправлять данные, дождаться ответа и верните его.

Используя и вы в основном выскакивая эту команду в фоновом процессе (это называется «работой»). Само по себе это не заставляет работать быстрее. Но это означает, что ваш цикл больше не заблокирован, и может сделать следующую итерацию (с следующим NC) уже.

Так что в основном, ваше ускорение вызвано делать все эти удаленные соединения параллельно, где иначе им придется дождаться предыдущего завершения.

Кстати, в зависимости от вашего терминала, команды echo также могут замедлить свой цикл (им иногда нужно ждать, пока в буфере записи нет места).

2
27.01.2020, 19:46

Теги

Похожие вопросы