Jika saya memulai proses dan kemudian menghapus binernya, saya masih dapat memulihkannya dari /proc/<pid>/exe
:
$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe
File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Di sisi lain, jika saya membuat tautan simbolis sendiri, hapus target dan coba salin:
cp: cannot stat ‘sleep’: No such file or directory
/proc
adalah antarmuka ke kernel. Jadi apakah tautan simbolis ini sebenarnya menunjuk ke salinan yang dimuat dalam memori, tetapi dengan nama yang lebih berguna? Bagaimana cara exe
kerja tautan, tepatnya?
proc_exe_link()
dalam sistemproc
file: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350Menurut halaman manual / proc, di Linux 2.2 dan yang lebih baru, file tersebut adalah tautan simbolik yang berisi pathname aktual dari perintah yang dieksekusi. Rupanya, biner dimuat ke dalam memori, dan
/proc/[pid]/exe
menunjuk ke konten biner dalam memori .Di sisi lain, di bawah Linux 2.0 dan sebelumnya,
/proc/[pid]/exe
tampaknya adalah penunjuk ke file (dalam sistem file) yang dieksekusi.Jadi jika Anda menjalankan daftar perintah yang sama di Linux 2.0 atau sebelumnya, mungkin Anda akan mendapatkan kesalahan "tidak ada file atau direktori".
sumber