Рассмотрим этот пример на основе примера из справочной страницы flock
:
#!/bin/bash
func() {
echo "$$ trying to acquire lock"
(
flock -e 42
echo "lock acquired by $$"
sleep 10
) 42> /tmp/mylock
echo "lock released by $$"
}
func
Теперь, если я запущу этот скрипт один раз:
$ bash ex.sh
22241 trying to acquire lock
lock acquired by 22241
lock released by 22241
Если я запускаю два экземпляра в течение этого 10 -секундного окна сна этого скрипта, первый в фоновом режиме, возможная последовательность событий:
$ bash ex.sh& bash ex.sh
[1] 24518
24519 trying to acquire lock
24518 trying to acquire lock
lock acquired by 24519
lock released by 24519
lock acquired by 24518
$
lock released by 24518
В этом примере второй процесс выиграл гонку и первым получил блокировку. Затем он снял блокировку и позволил первому (фоновому )процессу получить доступ, после чего снял блокировку.
Я могу повысить шансы на то, что первый процесс выиграет гонку, введя задержку между их запуском:
$ bash ex.sh& sleep 1; bash ex.sh
[1] 30158
30158 trying to acquire lock
lock acquired by 30158
30179 trying to acquire lock
lock released by 30158
lock acquired by 30179
lock released by 30179
Если вы новичок, вам не о чем беспокоиться (какое-то время ). Я считаю полезным просмотреть (извлечение конкретной информации из /proc ), но на данный момент вы, вероятно, можете использовать такие инструменты, как top, netstat, iostat. Все они обрабатывают для вас информацию из /proc и дают вам то, что полезно...
Я не пытаюсь показаться покровительственным, просто в данный момент это может быть слишком подавляющим