Написание PID-файла в Linux - PullRequest
5 голосов
/ 18 марта 2011

В настоящее время я работаю над демоном linux, который должен быть единичным экземпляром (т. Е. Ограничен 1 процессом «1 пользователь»). Каков наилучший способ сделать это без необходимости использовать getpid(), чтобы вручную записать pid в / var / run / и затем заблокировать его с помощью flock()?

Ответы [ 5 ]

3 голосов
/ 19 марта 2011

Заверните запуск и останов с помощью start-stop-daemon .

1 голос
/ 29 июля 2011

Просто заблокируйте сам исполняемый файл.

1 голос
/ 18 марта 2011

Я использую что-то подобное в паре скриптов initd, которые я написал. Замените КОМАНДУ тем, что вам нужно

PIDFILE=/var/run/service.pid
COMMAND="java -jar start.jar"
$COMMAND > /dev/null 2>&1 &
echo $! > $PIDFILE

Отредактировано по предложению @dogane, также протестировано.

1 голос
/ 18 марта 2011

Просто используйте libunique . Это самый простой способ.

0 голосов
/ 18 марта 2011

Если вы действительно не можете иметь файл блокировки, используйте вместо этого сокет. Другой экземпляр не сможет запуститься, поскольку адрес уже будет использоваться.

...