Будет ли сценарий оболочки блокировать файл при записи содержимого?

У меня есть сценарий оболочки, который записывает содержимое в файл,

#!/bin/bash
SLEEP=1
FILE_PATH=${1}
while true
  do
    ps aux wc -l > ${FILE_PATH}
    sleep ${SLEEP}
done

У меня есть еще один PHP-скрипт, который читает содержимое файла с помощью file_get_contents (). Я знаю, что file_get_contents () сделает LOCK_EX (эксклюзивная блокировка).

Мой вопрос,

  1. Будет ли сценарий оболочки блокировать файл при записи в файл? если да, то какой тип блокировки будет использоваться эксклюзивная, общая ..?
  2. Поскольку мой сценарий PHP также блокирует файл, остановит ли он запись сценария оболочки и сделает файл недоступным для сценария оболочки?

Поскольку я пишу файл в сценарии оболочки с интервалом в 1 секунду. Я боюсь, что запись / чтение файла не удастся в обоих сценариях.


person Dinesh Kumar Sarangapani    schedule 17.10.2012    source источник


Ответы (1)


Как правило, любая запись в файл требует исключительной блокировки.

Сценарий PHP не сможет получить свою блокировку до тех пор, пока сценарий оболочки не освободится, и наоборот. Это приводит к так называемой тупиковой ситуации, когда два процесса борются за один и тот же ресурс.

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

person Tetsujin no Oni    schedule 17.10.2012
comment
Да, могу ли я напрямую выполнить команду, используя функцию php exec (), чтобы прочитать счетчик процессов? - person Dinesh Kumar Sarangapani; 17.10.2012