/ proc / self, sözdizimsel şekerdir. Bu, getpid () sistem çağrısının kirletici / proc / ve sonuçlarına bir kısayol (bash olarak metavariable $$ olarak erişilebilir). Kabuk komut dosyası durumunda, ifadelerin birçoğunun diğer işlemleri çağırdığı gibi, kendi PID'leriyle tamamlanan kafa karıştırıcı olabilir; ölü işlemlerden daha sık olarak söz konusu olan PID'ler. Düşünmek:
root@vps01:~# ls -l /proc/self/fd
total 0
lrwx------ 1 root root 64 Jan 1 01:51 0 -> /dev/pts/0
lrwx------ 1 root root 64 Jan 1 01:51 1 -> /dev/pts/0
lrwx------ 1 root root 64 Jan 1 01:51 2 -> /dev/pts/0
lr-x------ 1 root root 64 Jan 1 01:51 3 -> /proc/26562/fd
root@vps01:~# echo $$
593
'/ bin / ls', dizinin yolunu değerlendirecek ve / proc / 26563 olarak çözecektir, çünkü sürecin PID'si (dizinin içeriğini okuyan yeni yaratılmış / bin / ls işlemi). Ancak, boru hattındaki bir sonraki işlem, kabuk kodlaması durumunda veya bilgi istemi geri döndüğü zaman, etkileşimli bir kabuk durumunda , yol artık mevcut değildir ve bilgi çıkışı varolmayan bir işleme atıfta bulunur.
Ancak bu yalnızca dış komutlar için geçerlidir (kabuğun kendi içine yerleştirilmesinin aksine, gerçek yürütülebilir program dosyaları olanlardır). Bu nedenle, yol adını harici bir işleme / bin / ls dizinine iletmek yerine, dizinin içeriğinin bir listesini elde etmek için dosya adı globbing kullanıyorsanız farklı sonuçlar alırsınız:
root@vps01:~# ls /proc/self/fd
0 1 2 3
root@vps01:~/specs# echo /proc/self/fd/*
/proc/self/fd/0 /proc/self/fd/1 /proc/self/fd/2 /proc/self/fd/255 /proc/self/fd/3
İlk satırda kabuk, "/ proc / self / fd" yi argv [1] 'i geçerek exec () sistem çağrısı üzerinden' / bin / ls 'adlı yeni bir süreç ortaya çıkardı. '/ bin / ls' sırayla / proc / self / fd dizinini açıp okuduktan sonra içindekiler üzerinde yinelenen içerikleri yazdırıldı.
Bununla birlikte, ikinci satır dosya listesini genişletmek için sahne arkasındaki glob () işlevini kullanır; bunlar yankıya dizge dizisi olarak geçirilir. (Genellikle bir iç komut olarak uygulanır, ancak çoğu zaman bir / bin / echo ikili dosyası da vardır ... ancak bu kısım aslında anlamsızdır, çünkü yankı yalnızca hiçbir zaman yol adları ile ilgili herhangi bir sisteme beslenmeyen dizelerle ilgilenir.)
Şimdi, aşağıdaki durumu göz önünde bulundurun:
root@vps01:~# cd /proc/self/fd
root@vps01:~# ls
0 1 2 255
Burada, / bin / ls öğesinin üst işlemi olan kabuk, / proc / self dizininin bulunduğu dizini oluşturdu . Böylece, göreceli yol adları perspektifinden değerlendirilir. En iyi tahminim, bunun açık dosya tanımlayıcıları da dahil olmak üzere bir dosyaya birden fazla sabit bağlantı oluşturabileceğiniz POSIX dosya anlambilimiyle ilgili olduğudur . Yani bu sefer, / bin / ls, echo / proc / $$ / fd / * 'ye benzer şekilde davranır.
/proc/self
Elbette değerlendiren süreç .