GNU/Linux >> Belajar Linux >  >> Linux

Variabel lingkungan dari proses yang berjalan di Unix?

Solusi 1:

cat /proc/<pid>/environ

Jika Anda ingin memiliki pid dari suatu executable yang sedang berjalan, Anda dapat, di antara beberapa kemungkinan lainnya, gunakan pidof :

AlberT$ pidof sshd   
30690 6512 

EDIT :

Saya benar-benar mengutip komentar Dennis Williamson dan Teddy untuk mendapatkan hasil yang lebih mudah dibaca. Solusi saya adalah sebagai berikut:

tr '\0' '\n' < /proc/<pid>/environ

Solusi 2:

Karena pertanyaan ini memiliki unix tag dan semua orang telah melakukan pekerjaan yang luar biasa menangani linux tag, Anda bisa mendapatkan informasi ini di OS X dan sistem turunan BSD lainnya menggunakan

ps -p <PID> -wwwe

atau

ps -p <PID> -wwwE

dan di Solaris dengan

/usr/ucb/ps -wwwe <PID>

Solaris juga mendukung /proc direktori jika Anda tidak ingin mengingat ps yang tidak jelas perintah.

Solusi 3:

Seperti yang telah disebutkan orang lain, di Linux, Anda dapat melihat /proc tetapi ada, bergantung pada versi kernel Anda, satu atau dua batasan:

Pertama-tama, file lingkungan berisi lingkungan seperti yang terlihat saat proses tersebut dijalankan. Artinya, setiap perubahan yang mungkin dilakukan proses pada lingkungannya tidak akan terlihat di /proc:

$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$ 

Shell pertama adalah shell login dan awalnya memiliki lingkungan yang sangat terbatas tetapi menumbuhkannya dengan sumber mis. .bashrc tetapi /proc tidak mencerminkan hal ini. Shell kedua mewarisi lingkungan yang lebih besar dari awal, yang mengapa ditampilkan di /proc.

Selain itu, pada kernel lama, konten file lingkungan dibatasi hingga ukuran halaman (4K):

$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$ 

Di antara 2.6.9 (RHEL4) dan 2.6.18 (RHEL5), batas ini telah dihapus...

Solusi 4:

penggunaan opsi BSD yang benar untuk melakukan ini (setidaknya di linux):

ps e $pid

atau

ps auxe  #for all processes

dan ya, halaman manual ps cukup membingungkan.(via)

Solusi 5:

Meskipun agak jarang didokumentasikan, isi dari /proc/<pid>/environ hanya akan berisi lingkungan yang digunakan untuk memulai proses.

Jika Anda perlu memeriksa status lingkungan proses saat ini, salah satu cara melakukannya adalah dengan menggunakan gdb .

# Start gdb by attaching it to a pid or core file
gdb <executable-file> <pid or core file>

# Run the following script to dump the environment
set variable $foo = (char **) environ
set $i = 0
while ($foo[$i] != 0)
print $foo[$i++]
end

Linux
  1. Menjalankan sqlplus di latar belakang di Unix

  2. Tetapkan lingkungan sementara ($PATH)

  3. Menggunakan Variabel Lingkungan di Perintah cURL - Unix

  1. Betapa tidak disetelnya banyak variabel lingkungan

  2. Apa PID di host, dari proses yang berjalan di dalam container Docker?

  3. Bagaimana Saya Dapat Membuat File Dump dari Proses yang Berjalan di Linux?

  1. Referensi Variabel Lingkungan *di* /etc/environment?

  2. Menentukan prosesor tertentu di mana proses sedang berjalan

  3. Apakah variabel lingkungan terlihat oleh pengguna yang tidak memiliki hak di Linux?