научите пользоваться командой wait

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

научите пользоваться командой wait

Сообщение Ленивая Бестолочь »

мана у меня на нее нет почемуто :-/

все, что нашел полезного - в ABS, однако там или не все, или я обламываюсь.

ситуация такая:
мне нужно оптимизировать один скрипт.
в числе прочего там есть момент, когда он подключается к оралковому серверу с помощью sqlplus и запрашивает оттуда большой объем данных.
я хочу делать это в несколько потоков. последовательно получается - запросы запускаются по очереди, потом склеиваю результат cat-ом, все ок.
попробовал параллельно. по всей видимости скрипт завершается раньше, чем дочерние процессы, что нельзя, т.к. склевание произойдет раньше, чем закончатся запросы, к тому же, вроде как такие процессы станут зомби.
понял, что придется как-то дождаться завершения процессов.
у wait есть праметр - номер процесса.
мне это не подходит, т.к. процессов много, не wait-ить же все...
еще у него в качестве параметра можно (согласно ABS) написать вот такое: wait %?S, где S - часть команды, которую нужно ждать.
но такой вариант тоже не работает (я не знаю, почему - наверное ждет только один процесс).

нет ли у wait какого-нибудь ключа типа - ждать завернешия всех дочерних процессов?
или, может быть есть другой способ?
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
alfss
Сообщения: 262

Re: научите пользоваться командой wait

Сообщение alfss »

в гугле
Мютексы
Симофоры
Потоки
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: научите пользоваться командой wait

Сообщение broom »

alfss писал(а):
29.09.2008 01:07
в гугле
Мютексы
Симофоры
Потоки

Да, и всё это в Shell'е...
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: научите пользоваться командой wait

Сообщение t.t »

JIeHb писал(а):
29.09.2008 00:19
мана у меня на нее нет почемуто :-/
Потому что это внутренняя команда. См. help wait или man bash / info bash.

JIeHb писал(а):
29.09.2008 00:19
нет ли у wait какого-нибудь ключа типа - ждать завернешия всех дочерних процессов?
или, может быть есть другой способ?
А jobs не поможет?
(help jobs) писал(а):If -x is given, COMMAND is run after all job specifications that appear in ARGS have been replaced with the process ID of that job's process group leader.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: научите пользоваться командой wait

Сообщение Goodvin »

alfss писал(а):
29.09.2008 01:07
в гугле
Мютексы
Симофоры
Потоки

Вам на www.gramota.ru, милейший.
Чтобы не позориться с "симофорами" и не путать людей своими "советами".

Прежде чем посылать кого-либо в гугль, надо самому туда сходить и проверить то, что советуете.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: научите пользоваться командой wait

Сообщение Ленивая Бестолочь »

Потому что это внутренняя команда

в смысле - внутренняя команда баша?
у меня на man wait открывается описание системной функции wait.

А jobs не поможет?

похоже, что поможет - буду пробовать.
спасибо большое.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: научите пользоваться командой wait

Сообщение t.t »

JIeHb писал(а):
29.09.2008 14:57
Потому что это внутренняя команда
в смысле - внутренняя команда баша?
Вообще говоря, почти любого shell-а.

JIeHb писал(а):
29.09.2008 14:57
спасибо большое.
Не за что. Рад помочь.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: научите пользоваться командой wait

Сообщение broom »

JIeHb писал(а):
29.09.2008 14:57
Потому что это внутренняя команда

в смысле - внутренняя команда баша?

А если man 1 wait? У меня открывается мануал к bashу, и в конце там есть
wait [n ...]
Wait for each specified process and return its termination status. Each n may be a process ID or a job specification; if a job
spec is given, all processes in that job’s pipeline are waited for. If n is not given, all currently active child processes
are waited for, and the return status is zero. If n specifies a non-existent process or job, the return status is 127. Other-
wise, the return status is the exit status of the last process or job waited for.
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: научите пользоваться командой wait

Сообщение Ленивая Бестолочь »

с jobs разобрался, да, можно с помощью него сделать.


manager3-r:/home/rakul# man 1 wait
No manual entry for wait in section 1

If n is not given, all currently active child processes
are waited for, and the return status is zero


If n is not given, all currently active child processes
are waited for, and the return status is zero.

тоесть просто - wait мне подойдет, получается? :-)


проверил - подойдет :-)
извиняюсь - както нелепо тему развел из-за ерунды :-)
ну - зато научился.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: научите пользоваться командой wait

Сообщение t.t »

broom писал(а):
29.09.2008 15:05
JIeHb писал(а):
29.09.2008 14:57
Потому что это внутренняя команда
в смысле - внутренняя команда баша?
А если man 1 wait? У меня открывается мануал к bashу
От дистрибутива зависит. Подозреваю, что в арче есть симлинк вроде /usr/share/man/man1/wait.1.gz -> bash.1.gz
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: научите пользоваться командой wait

Сообщение rm_ »

извиняюсь - както нелепо тему развел из-за ерунды :-)
ну - зато научился.

И всеобщее внимание обратили на этот wait, что тоже полезно. :)
Я, к примеру, сейчас соптимизировал свой бэкап-скрипт. Он у меня основан на использовании программы mirrordir, которая обходит каталоги, и найденные различия копирует из основной копии в бэкап. Как оказалось, если запускать все бэкапы параллельно, они завершаются быстрее, чем если каждый пускать по очереди. Получилось примерно так:

Код: Выделить всё

mount /backup
mirrordir /source/dir1 /backup/dir1 &
mirrordir /source/dir2 /backup/dir2 &
mirrordir /source/dir3 /backup/dir3 &
mirrordir /source/dir4 /backup/dir4 &
wait
umount /backup
Спасибо сказали: