мана у меня на нее нет почемуто :-/
все, что нашел полезного - в ABS, однако там или не все, или я обламываюсь.
ситуация такая:
мне нужно оптимизировать один скрипт.
в числе прочего там есть момент, когда он подключается к оралковому серверу с помощью sqlplus и запрашивает оттуда большой объем данных.
я хочу делать это в несколько потоков. последовательно получается - запросы запускаются по очереди, потом склеиваю результат cat-ом, все ок.
попробовал параллельно. по всей видимости скрипт завершается раньше, чем дочерние процессы, что нельзя, т.к. склевание произойдет раньше, чем закончатся запросы, к тому же, вроде как такие процессы станут зомби.
понял, что придется как-то дождаться завершения процессов.
у wait есть праметр - номер процесса.
мне это не подходит, т.к. процессов много, не wait-ить же все...
еще у него в качестве параметра можно (согласно ABS) написать вот такое: wait %?S, где S - часть команды, которую нужно ждать.
но такой вариант тоже не работает (я не знаю, почему - наверное ждет только один процесс).
нет ли у wait какого-нибудь ключа типа - ждать завернешия всех дочерних процессов?
или, может быть есть другой способ?
научите пользоваться командой wait
Модераторы: SLEDopit, Модераторы разделов
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
научите пользоваться командой wait
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
alfss
- Сообщения: 262
Re: научите пользоваться командой wait
в гугле
Мютексы
Симофоры
Потоки
Мютексы
Симофоры
Потоки
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: научите пользоваться командой wait
but in the darkness, behind your smile, you scream... © Dio
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: научите пользоваться командой wait
Потому что это внутренняя команда. См. help wait или man bash / info bash.
А 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
Вам на www.gramota.ru, милейший.
Чтобы не позориться с "симофорами" и не путать людей своими "советами".
Прежде чем посылать кого-либо в гугль, надо самому туда сходить и проверить то, что советуете.
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: научите пользоваться командой wait
Потому что это внутренняя команда
в смысле - внутренняя команда баша?
у меня на man wait открывается описание системной функции wait.
А jobs не поможет?
похоже, что поможет - буду пробовать.
спасибо большое.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: научите пользоваться командой wait
Вообще говоря, почти любого shell-а.
Не за что. Рад помочь.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: научите пользоваться командой wait
А если 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
тоесть просто - wait мне подойдет, получается? :-)
проверил - подойдет :-)
извиняюсь - както нелепо тему развел из-за ерунды :-)
ну - зато научился.
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
От дистрибутива зависит. Подозреваю, что в арче есть симлинк вроде /usr/share/man/man1/wait.1.gz -> bash.1.gz
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: научите пользоваться командой wait
извиняюсь - както нелепо тему развел из-за ерунды :-)
ну - зато научился.
И всеобщее внимание обратили на этот 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