[О блоге]
[наверх]
[пред]
[2021-08-12 17:05:24+03:00]
[992845bbef1a2f58e87c9052200a041bc2bd6608]
Темы: [bsd][tip]
setproctitle из daemontools на FreeBSD
https://oshogbo.vexillium.org/blog/51/
Из коробки setproctitle будет работать на FreeBSD... плохо. Прямое
изменение argv не приведёт к обновлению информации о процессе, которую
можно бы было увидеть в procstat -c или ps. setproctitle() работает
отлично, ибо внутри он делает sysctl вызов для обновления закэшированной
информации о командной строке. Всё не мог понять почему когда я руками
работаю с setproctitle, то не вижу обновлений, но ошибки в setproctitle
живущем с момента запуска системы видны. Но FreeBSD, как всегда, молодец
и имеет setproctitle_fast() для частого обновления, которое любит делать
PostgreSQL например.
[оставить комментарий]
- комментарий 0:
From: kmeaw
Date: 2021-08-12 19:21:16Z
Мне нравится трюк, который используется в runit для аварийного
логирования в PID 1:
runsvdir -P /etc/service 'log: ..........' # тут сотни точек
Так резервируется место в argv, которое используется setproctitle,
вызываемой в случае, если svlogd не может записать лог на диск.
- комментарий 1:
From: Sergey Matveev
Date: 2021-08-12 19:24:27Z
*** kmeaw [2021-08-12 22:17]:
>Так резервируется место в argv, которое используется setproctitle,
>вызываемой в случае, если svlogd не может записать лог на диск.
Да, именно это делает readproctitle в daemontools. И именно это у меня и
не работало когда запускал руками в терминале, но "ps" показывает что
точки заменяются. А дело было в "кэше" командной строки. Просто так
заменить argv в FreeBSD не получится -- точнее изменение с ходу не
отобразится в ps/procstat.