Re: вопрос по .xsession-errors
On 2015-11-23, Oleksandr Gavenko wrote:
> Я попробовал:
>
> $ sudo auditctl -w /tmp -p w
>
> При старте xterm в логе есть строчка:
>
> type=SYSCALL msg=audit(1448308853.684:34): arch=c000003e syscall=87
> success=yes exit=0 a0=24218a0 a1=7ffe55d12880 a2=7ffe55d12880
> a3=7ffe55d12640 items=2 ppid=3522 pid=12342 auid=4294967295 uid=1000
> gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000
> tty=(none) ses=4294967295 comm="xterm" exe="/usr/bin/xterm" key=(null)
>
> Тут у нас pid, ppid, uid, gid, а также:
>
> comm="xterm" exe="/usr/bin/xterm"
>
> что очень удобно для быстро исчезающих скриптов.
Я боялся что не будет имени исполняемого файла.
Есть lastcomm из пакета acct (который также запускает сервис):
bash# lastcomm
lastcomm user pts/3 0.00 secs Mon Nov 23 22:38
sh user pts/8 0.00 secs Mon Nov 23 22:37
awk user pts/8 0.00 secs Mon Nov 23 22:37
sed user pts/8 0.00 secs Mon Nov 23 22:37
man user pts/8 0.01 secs Mon Nov 23 22:37
Согласно ACCT(5):
If the kernel is built with the process accounting option enabled
(CONFIG_BSD_PROCESS_ACCT), then calling acct(2) starts process
accounting, for example:
acct("/var/log/pacct");
/var/log/pacct - бинарный файл, lastcomm помагает его читать.
Мне очень жаль что нет полного пути к команде и нет опций запуска и нет PWD.
Эта информация очень бы помогла в отладке.
Можно попробовать стартовать пользователькую сесию с
$ cat ~/.xinitrc
...
strace -e execve -o ~/strace.log -f LASTCOMMAND
Будет вылазить:
bash# strace -e execve -f sh -c "/bin/echo ok"
execve("/bin/sh", ["sh", "-c", "/bin/echo ok"], [/* 59 vars */]) = 0
Process 14651 attached
[pid 14651] execve("/bin/echo", ["/bin/echo", "ok"], [/* 59 vars */]) = 0
ok
[pid 14651] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=14651, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
Там пытаться воспроизвести проблемную ситуацию.
Текущий каталог мониторить по:
$ strace -e chdir,execve -f xterm
Далее нашел:
$ sudo forkstat
23:06:33 exec 15004 /bin/bash -c exec xterm -e bash -i
23:06:33 exec 15004 xterm -e bash -i
23:06:33 fork 15004 parent xterm -e bash -i
23:06:33 fork 15005 child xterm -e bash -i
23:06:33 exec 15005 bash -i
23:06:33 fork 15005 parent bash -i
23:06:33 fork 15006 child bash -i
23:06:33 fork 15006 parent bash -i
23:06:33 fork 15007 child bash -i
23:06:33 exec 15007 dircolors -b /home/user/.dircolors
23:06:33 exit 15007 0 0.001 dircolors -b /home/user/.dircolors
23:06:33 exit 15006 0 0.001 bash -i
23:06:33 fork 15005 parent bash -i
23:06:33 fork 15008 child bash -i
23:06:33 fork 15008 parent bash -i
23:06:33 fork 15009 child bash -i
23:06:33 exec 15009 ls /etc/bash_completion.d
23:06:33 exit 15009 0 0.002 ls /etc/bash_completion.d
...
Это не поможет топикстартеру, но интересно было разобраться, а то смешно,
когда то на работе в цикле грепали ps:
while true;
ps -e | grep COND
sleep 1
done
--
Best regards!
Reply to: