GNU/Linux >> Belajar Linux >  >> Linux

Linux – /proc/pid/fd/x Nomor Tautan?

Di Linux, di /proc/PID/fd/X , link untuk file deskriptor yang berbentuk pipa atau socket memiliki nomor, seperti:

l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839]
l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839]
lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925]
lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926]
lr-x------ 1 user user 64 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 -> socket:[3142930]
lrwx------ 1 user user 64 Mar 24 00:05 8 -> socket:[3142932]
lr-x------ 1 user user 64 Mar 24 00:05 9 -> pipe:[9837788]

Seperti pada baris pertama:6839. Angka itu mewakili apa?

Jawaban yang Diterima:

Itu nomor inode untuk pipa atau soket yang dimaksud.

Pipa adalah saluran searah, dengan ujung tulis dan ujung baca. Dalam contoh Anda, sepertinya FD 5 dan FD 6 berbicara satu sama lain, karena nomor inodenya sama. (Mungkin tidak. Lihat di bawah.)

Lebih umum daripada melihat program berbicara sendiri melalui pipa adalah sepasang program terpisah berbicara satu sama lain, biasanya karena Anda menyiapkan pipa di antara mereka dengan shell:

shell-1$ ls -lR / | less

Kemudian di jendela terminal lain:

shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]

Ini mengatakan bahwa output standar PID 4242 (FD 1, menurut konvensi) terhubung ke pipa dengan nomor inode 222536390, dan input standar PID 4243 (FD 0) terhubung ke pipa yang sama.

Semuanya adalah cara yang panjang untuk mengatakan bahwa ls output sedang dikirim ke less masukan.

Kembali ke contoh Anda, FD 1 dan FD 2 hampir pasti tidak berbicara satu sama lain. Kemungkinan besar ini adalah hasil dari mengikat stdout (FD 1) dan stderr (FD 2) bersama-sama, sehingga keduanya menuju ke tujuan yang sama. Anda dapat melakukannya dengan shell Bourne seperti ini:

$ some-program 2>&1 | some-other-program

Jadi, jika Anda melihat-lihat /proc/$PID_OF_SOME_OTHER_PROGRAM/fd , Anda akan menemukan FD ketiga yang dilampirkan ke pipa dengan nomor inode yang sama seperti yang dilampirkan ke FD 1 dan 2 untuk some-program contoh. Ini mungkin juga terjadi dengan FD 5 dan 6 dalam contoh Anda, tetapi saya tidak memiliki teori yang siap bagaimana kedua FD ini diikat bersama. Anda harus tahu apa yang dilakukan program secara internal untuk mengetahuinya.

Terkait:Linux – Hanya menampilkan titik pemasangan yang "menarik" / memfilter jenis yang tidak menarik?
Linux
  1. /proc/[pid]/pagemaps dan /proc/[pid]/maps | linux

  2. linux /proc/loadavg

  3. Bagaimana cara mendekode entri /proc/pid/pagemap di Linux?

  1. Menjelajahi sistem file Linux /proc

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Apakah salah menautkan /dev/random ke /dev/urandom di Linux?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux – Menautkan /proc/mnt Ke /proc/mounts?

  3. Linux – Jumlah Prosesor di /proc/cpuinfo?