[systemd-devel] journal handling of process title changes
Lennart Poettering
lennart at poettering.net
Mon Mar 24 09:30:07 PDT 2014
On Sun, 23.03.14 21:46, Patrick Donnelly (batrick at batbytes.com) wrote:
> My problem is not related to race conditions. The issue is that
> /proc/pid/cmdline is shown instead of /proc/pid/comm for each journal
> entry. That is:
>
> $ journalctl --boot
> [...]
> Mar 23 21:39:01 host a.out[10697]: hi
> Mar 23 21:39:01 host c[10697]: bye2
> [...]
>
> These identifiers are being pulled from cmdline or argv[0] somehow.
Yupp, the client side also sends an identifier to the server which is
used if it exists. It's container in the SYSLOG_IDENTIFIER field.
I figure what happens for you is that when you change argv[0] the GNU
program_invocation_short_name variable is not updated, and sd-journal
picks up that variable for setting SYSLOG_IDENTIFIER.
>
> >> #include <sys/prctl.h>
> >> #include <systemd/sd-journal.h>
> >>
> >> int main (int argc, char *argv[])
> >> {
> >> printf("%d\n", prctl(PR_SET_NAME, "foo", 0, 0, 0));
> >> sd_journal_print(LOG_INFO, "hi");
> >> strcpy(argv[0], "abc");
> >> sd_journal_print(LOG_INFO, "bye2");
> >> return 0;
> >> }
I figure you can fix this by changing program_invocation_short_name too:
program_invocation_short_name = basename(argv[0]);
See:
http://linux.die.net/man/3/program_invocation_short_name
If you don't update it too it will still point to the old value...
p_i_s_n is used internally by glibc too btw, so it should be updated in
any case if you change argv[0].
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list