Saya perlu memecahkan beberapa masalah yang terkait dengan variabel lingkungan pada sistem Unix.
Pada Windows, saya dapat menggunakan alat seperti ProcessExplorer untuk memilih proses tertentu dan melihat nilai dari masing-masing variabel lingkungan.
Bagaimana saya bisa melakukan hal yang sama di Unix? echoing
dan env
cmd hanya menunjukkan nilai pada saat ini, tetapi saya ingin melihat nilai apa yang sedang berjalan saat ini.
Jawaban:
Jika Anda ingin memiliki pid (s) dari executable berjalan yang diberikan Anda dapat, di antara sejumlah kemungkinan lain, gunakan
pidof
:EDIT :
Saya benar-benar mengutip komentar Dennis Williamson dan Teddy untuk mencapai hasil yang lebih mudah dibaca. Solusi saya adalah sebagai berikut:
sumber
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
sistem file tidak portabel.xargs
untuk mengonversi nulls ke baris baru lebih baik daripada menggunakantr
. Bisakah seseorang menjelaskannya untuk saya? Terima kasih.Karena pertanyaan ini memiliki tag unix dan semua orang telah melakukan pekerjaan yang sangat baik menangani tag linux , Anda bisa mendapatkan informasi ini pada OS X dan sistem turunan BSD lainnya menggunakan
atau
dan di Solaris dengan
Solaris juga mendukung
/proc
direktori jika Anda tidak ingin mengingat perintah yang tidak jelasps
.sumber
ps -p <PID> -wwE
./proc/PID/environ
. File-file itu hanya dapat dibaca oleh pemilik proses.Seperti yang disebutkan orang lain, di Linux, Anda dapat mencari di / proc tetapi ada, tergantung pada versi kernel Anda, satu atau dua batasan:
Pertama-tama, file environment berisi lingkungan seperti yang terlihat ketika proses itu muncul. Itu berarti bahwa setiap perubahan proses yang mungkin telah dilakukan terhadap lingkungannya tidak akan terlihat di / proc:
Shell pertama adalah shell login dan awalnya memiliki lingkungan yang sangat terbatas tetapi tumbuh dengan sumber misalnya .bashrc tetapi / proc tidak mencerminkan hal ini. Shell kedua mewarisi lingkungan yang lebih besar dari awal, itulah sebabnya ia tampil di / proc.
Juga, pada kernel yang lebih tua, isi file environment dibatasi hingga ukuran halaman (4K):
Di suatu tempat antara 2.6.9 (RHEL4) dan 2.6.18 (RHEL5) batas ini telah dihapus ...
sumber
perbaiki penggunaan opsi BSD untuk melakukan ini (setidaknya di linux):
atau
dan ya, halaman ps cukup membingungkan. ( via )
sumber
ps eww $pid
perbaikan masalah ke-2.xargs
atautr
mengonversinya ke baris baru agar mudah dibaca. Anda mungkin menyadari hal ini dalam empat tahun terakhir.ganti PID dengan PID dari proses yang ingin Anda lihat. Setiap informasi tentang proses yang berjalan berada di bawah direktori / proc / PID /
contoh: cat / proc / 32512 /viron
sumber
Diambil dari wiki Archlinux :
Anda dapat membuat fungsi sementara untuk menguraikan nilai-nilai di
/proc/<pid>/environ
. Di terminal prompt:Kemudian dengan pid dari proses yang Anda inginkan, cukup gunakan:
sumber
Di Linux, saya akan mencoba melihat
sumber
Untuk Solaris 5.10, ini berfungsi:
sumber
Meskipun agak jarang didokumentasikan, konten
/proc/<pid>/environ
hanya akan berisi lingkungan yang digunakan untuk memulai proses.Jika Anda perlu memeriksa keadaan lingkungan proses saat ini, salah satu cara untuk melakukannya adalah dengan menggunakan
gdb
.sumber
Dan karena pekerjaan saya membuat saya menjadi penggemar boy AIX, janganlah kita lupa:
Atau seperti halaman manual menyebutnya, "Standar Berkeley".
Untuk alasan apa pun, / proc / PID / environment tidak ada di AIX.
sumber
Jika Anda ingin membuat
env
output seperti variabel lingkungan yang diformat untuk proses arbitrer (PID), Anda dapat membuatpenv <pid>
perintah bash yang nyaman (disesuaikan dengan OS Anda) dan menambahkannya ke.bashrc
:Linux menambahkan ini ke ~ / .bashrc Anda:
macOS / BSD menambahkan ini ke ~ / .bashrc Anda:
Solaris menambahkan ini ke ~ / .bashrc Anda:
Pemakaian:
sumber
Solusi mac, mungkin BSD lain juga bisa seperti itu
Variabel lingkungan ditambahkan ke baris perintah, ini menghapus baris perintah dan kami hanya memiliki variabel lingkungan yang tersisa.
Itu tidak sempurna karena mereka dipisahkan oleh ruang, bukan jika LF dipisahkan
sumber
/ proc / PID / environment
untuk ini, pertama-tama kita perlu mengidentifikasi PID dari proses. untuk ini, Anda dapat menggunakan perintah ps
sumber