[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: