Как просмотреть начальный и конечный адреса сегментов памяти, таких как стек, данные, куча и код?

Когда cron выполняет ваш скрипт, текущим рабочим каталогом является домашний каталог пользователя таблицы cron (, по-видимому, /root ), а ваш скрипт с его файлами находится в /backup. Вот почему скрипт не может найти table.txt, а цикл таблицы не имеет итераций.

Вы должны сначала перейти в каталог скрипта, а затем выполнить его, например:

58 16 * * * root cd /backup && /bin/sh -x call_backup.sh > backup.log
0
02.09.2019, 10:26
1 ответ

Если вы написали программу и хотите увидеть ее карту памяти во время ее работы, вы можете запустить ее в отладчике, таком как gdb, затем запустить ее и посмотреть карту памяти с помощью команды info proc mappings, вывод будет примерно таким:

(gdb) info proc mappings
process 6520
Mapped address spaces:

    Start Addr   End Addr       Size     Offset objfile
       0x10000    0x15000     0x5000        0x0 /bin/true
       0x24000    0x25000     0x1000     0x4000 /bin/true
       0x25000    0x26000     0x1000     0x5000 /bin/true
    0x76e6e000 0x76f98000   0x12a000        0x0 /lib/arm-linux-gnueabihf/libc-2.24.so
   ... etc...
    0x7efdf000 0x7f000000    0x21000        0x0 [stack]
    0xffff0000 0xffff1000     0x1000        0x0 [vectors]

Если вместо этого вы хотите увидеть сопоставления уже запущенного процесса, вы можете, предполагая, что у вас есть соответствующие разрешения, выполнить cat /proc/<pid>/maps. В качестве альтернативы вы можете подключиться к процессу с помощью gdb -p <pid>и сделать то, что я объяснил выше.

1
28.01.2020, 03:19

Теги

Похожие вопросы