denver
?>Скриптер
comand-line скрипт, только один процесс в памяти однвременно, getmypid и posix_kill
Сократил данный класс до минимума:
http://www.pure-php.de/node/20
Все работает прекрасно:
1. скрипт запускается
2. берет число из pid.dat файла
3. "пингует" процесс с posix_kill ( $pid, 0 );
4. если процесс есть то умираем
5. если нет процесса пишем в файл свой pid и начинаем работу
Все бы хорошо, но есть интересная багофича. Процессы запускаются от рута по крону, очень часто, и механризм проверки работает. Но если запустить руками процесс от юзера то он начнет работу несмотря на то есть ли в памяти другой (рутовый) или нет. Рутовый же, если есть юзерский процесс, не запустится, т.к. в нем проверка сработает.
Скорее всего posix_kill ( $pid, 0 ) возвращает false не только когда процесса нет, но и когда нет прав посылать ему комманды.
Как правильно проверить висит ли в памяти еще определенный пид?
Сократил данный класс до минимума:
http://www.pure-php.de/node/20
Все работает прекрасно:
1. скрипт запускается
2. берет число из pid.dat файла
3. "пингует" процесс с posix_kill ( $pid, 0 );
4. если процесс есть то умираем
5. если нет процесса пишем в файл свой pid и начинаем работу
Все бы хорошо, но есть интересная багофича. Процессы запускаются от рута по крону, очень часто, и механризм проверки работает. Но если запустить руками процесс от юзера то он начнет работу несмотря на то есть ли в памяти другой (рутовый) или нет. Рутовый же, если есть юзерский процесс, не запустится, т.к. в нем проверка сработает.
Скорее всего posix_kill ( $pid, 0 ) возвращает false не только когда процесса нет, но и когда нет прав посылать ему комманды.
Как правильно проверить висит ли в памяти еще определенный пид?