Her işlemin geçerli bir dizini olması ne anlama gelir?


10

"Unix Programlama Ortamı" nı okuyorum ama şu anki süreç dizini kavramını anlamıyorum .

Her işlemin geçerli bir dizini vardır ve doğrudan eğik çizgi ile başlamadıkça tüm dosya adlarının bu dizinin adıyla başladığı varsayılır.

Her işlemin hangi dizinde oluşturulduğunu gösteren bir işaret olduğu anlamına mı geliyor? Örneğin, program /bin/sedçağrıldıysa /home/rene, sed çağrılmasından oluşturulan işlem geçerli dizine sahip /home/renemi?

Yanıtlar:


13

Kavramsal seviye

Kabuğunuzdan bir işlem başlattığınızda, işlemin geçerli çalışma dizini kabuğunuzun geçerli çalışma diziniyle aynıdır. Kabuk bağlamında, geçerli çalışma dizini şu anda "bulunduğunuz" konumdur.

Herhangi bir işlemin geçerli çalışma dizini göreli yolları yorumlamak için kullanılır. Kullandığınız kabuğun Geçerli çalışma dizini olsaydı Örneğin, /home/reneve kaçtın ls ..kabuğundan, sürecin Geçerli çalışma dizini, /home/rene, kararlılığının için kullanılacak ..üzere /home.

Sisteminizde çalışan tüm işlemlerin geçerli çalışma dizinlerini lsof | grep '\scwd\s'şu şekilde görebilirsiniz (diğer kullanıcıların işlemlerini görmek için muhtemelen root olmanız gerektiğini unutmayın.) Bu size mevcut çalışma dizinlerinin sisteminizde çalışan işlemler.

Program seviyesi

Kabuğun geçerli çalışma dizini, kabuk yerleşikleriyle pwdve cdsırasıyla değiştirdiğiniz ve değiştirdiğiniz dizindir . Bu komutlar , kabuğunuzun geçerli çalışma dizini ile çalışan getcwdve böyle sistem çağrılarını çağırır chdir.

Kullanılması bashörnek olarak, cddahili sonunda bu çizgiyi çalıştırır:

if (chdir (nolinks ? newdir : tdir) == 0)

ve pwdyerleşik olarak sonunda bu satırı çalıştırır:

the_current_working_directory = getcwd (0, PATH_MAX);

Kabuk, şu andaki çalışma direktörünün kullanımına uygun bir örnektir; aynı sistem çağrıları diğer programlar tarafından da kullanılır. Bir program geçerli çalışma dizinini olarak değiştirebilir /usrve programın kullandığı göreli yollar dizinden başlayacaktır /usr,

Çekirdek seviyesi

Bir işlemin geçerli çalışma dizini çekirdek tarafından saklanır. Linux bunu depolayan pwdbir üyesi fs_structtarafından sivri fsbir üyesi task_struct. pwdÜyesi bir olduğunu pathmonte hakkındaki bilgilere işaret yapı, ( vfsmountdosya sisteminde) ve dizinin konum ( dentry). Her sürecin bir task_structilişkisi vardır.

chdirVe getcwdsistem çağrıları değiştirmek ve bilgi almak pwd.


Ayrıca, çekirdek seviyesi için, bir sistem çağrısı yapıldığında, 'geçerli' görev_yapısı için bir işaretçi olduğunu hatırlamakta fayda var - böylece kod 'mevcut işlem' adına yürütülür. fs_struct'a mevcut görev_structına
Dmitrii S.

1

Her işlem, başlatıldığında atanan geçerli bir çalışma dizinine (CWD) sahiptir. Bir işlemin çalışma dizinini bulmak için aşağıdakileri yapabilirsiniz.

Bir işlemin PID'sini bulmak için ps aux komutunu çalıştırın:

$ pgrep cupsd
24532

Bir PID'nin geçerli çalışma dizinini bulmak için: 24532

$ sudo pwdx 24532
24532: /

Yani işlemin (PID: 24532) bir CWD'si var /.

İşte başka bir örnek:

$ sleep 1000 &
[1] 15988

$ pwdx 15988
15988: /home/sam

Bu kez uyku işlemi (PID: 15988) CWD'yi ana dizinime ayarladı /home/sam.

ls -lKomutu da çalıştırabilirsiniz :

$ sudo ls -l /proc/24532/cwd
lrwxrwxrwx 1 root root 0 Apr 30 19:18 /proc/24532/cwd -> /

-veya-

$ ls -l /proc/15988/cwd
lrwxrwxrwx 1 sam sam 0 Apr 30 19:23 /proc/15988/cwd -> /home/sam

Burada bu süreçler için CWD'yi tekrar görebilirsiniz /ve /home/sam.

Referanslar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.