[О блоге] [наверх] [пред] [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.