Вот один из способов сделать это:
awk 'FNR==NR{ids[$0]=$0;next}{for(id in ids){if($0 ~ id){print}}}' file1 file2
Да, каждый процесс получает собственное сопоставление необходимых ему библиотек.
Да, большая часть данных является общей, поэтому каждый процесс «видит» одну и ту же физическую память (по разным линейным адресам ), предполагая, что одна и та же версия каждого файла является общей.
Вы можете увидеть различные сопоставления, просмотрев файл maps
внутри каталога /proc/
каждого процесса; для libc
вы увидите такие записи, как
7f1014062000-7f10141f7000 r-xp 00000000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f10141f7000-7f10143f7000 ---p 00195000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f10143f7000-7f10143fb000 r--p 00195000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f10143fb000-7f10143fd000 rw-p 00199000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
или
7f4d7a8ec000-7f4d7aa81000 r-xp 00000000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f4d7aa81000-7f4d7ac81000 ---p 00195000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f4d7ac81000-7f4d7ac85000 r--p 00195000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
7f4d7ac85000-7f4d7ac87000 rw-p 00199000 fd:0d 1444681 /lib/x86_64-linux-gnu/libc-2.24.so
Отображение только для чтения -, исполняемый файл соответствует совместно используемому исполняемому коду в библиотеке; сопоставление только для чтения -дает доступ к общим данным только для чтения -в библиотеке; а отображение чтения -записи является частным отображением для переменных в библиотеке. Как вы можете видеть выше, линейные адреса различаются (благодаря рандомизации размещения адреса -и разным порядкам загрузки ); базовые физические адреса для общих частей одинаковы после их загрузки в память (, поскольку сопоставления отображают базовые файлы, а не общую память напрямую ).