Что означает число в выводе strace?

6331  execve("./a.out", ["./a.out"], [/* 22 vars */]) = 0
6331  brk(0)                            = 0x601000

Что здесь означает 6331?


person compiler    schedule 25.03.2011    source источник


Ответы (1)


6331 в вашем примере — это идентификатор процесса; это удобно, когда вы strace(1) с помощью -f или -F помечаете программу, которая порождает другие программы. Для быстрого примера попробуйте следующее:

strace -o /tmp/out -fF /etc/init.d/cron status

(В этом сценарии инициализации нет ничего волшебного, я просто подумал, что это сценарий, который есть в вашей системе.)

Файл /tmp/out покажет вам выходные данные нескольких процессов, и каждый будет иметь префикс своего pid:

22631 read(10, "#!/bin/sh -e\n# upstart-job\n#\n# S"..., 8192) = 1826
22631 pipe([3, 4])                      = 0
22631 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcb01efd9d0) = 22632
22631 close(4)                          = 0
22632 close(10 <unfinished ...>
22631 read(3,  <unfinished ...>
22632 <... close resumed> )             = 0
22632 close(3)                          = 0
22632 dup2(4, 1)                        = 1
22632 close(4)                          = 0
22632 stat("/home/sarnold/bin/basename", 0x7fffb751ce30) = -1 ENOENT (No such file or directory)

Вы можете увидеть создание нового процесса с вызовом clone(2) (именно так Linux реализовал fork() в новых версиях ядра).

person sarnold    schedule 25.03.2011
comment
Что означают числа в strace(1) и clone(2)? - person compiler; 25.03.2011
comment
@compiler, (1) и (2) показывают разделы справочной страницы. (1) — это команда уровня пользователя (ls(1), printf(1)), (2) — системный вызов ядра (fork(2), getpid(2), (3) — библиотечная функция (printf(3), signal(3)), (4) — драйвер устройства (/dev/null находится в null(4), mga(4) ), (5) — файлы конфигурации (smb.conf(5), ssh_config(5)), (6) — игры (robots(6), wump(6)), (7) — общие обзоры (ip(7), udp(7), signal(7)) и (8) — команды системного администратора (shutdown(8), reboot(8), ifconfig(8)). man 1 printf и man 3 printf. - person sarnold; 25.03.2011
comment
Что такое раздел по умолчанию, когда мы просто man xxx без номера? - person compiler; 25.03.2011
comment
@compiler, хороший вопрос! :) printf, sync, random и futex, похоже, выбирают страницу с наименьшим номером, но man umount возвращает umount(8), а не umount(2). По ощущениям это выглядит в таком порядке: 1 8 2 3 4 5 6 7 - person sarnold; 25.03.2011
comment
Ух ты, прямо здесь я узнал о справочных страницах больше, чем когда-либо где-либо еще. - person Kyle; 14.05.2020