Soru Unix'te çalışan bir işlemin ortam değişkenleri?


Unix sistemindeki ortam değişkenleriyle ilgili bazı problemleri gidermem gerekiyor.

Windows'da, belirli bir işlemi seçmek ve her bir ortam değişkeninin değerlerini görüntülemek için ProcessExplorer gibi bir araç kullanabilirim.

Unix'te aynı şeyi nasıl yapabilirim? echoing ve env cmd şimdiki zamanda değerleri gösterir, ancak şu anda çalışan işlemin hangi değerleri kullandığını görmek istiyorum.


203
2017-09-17 18:14


Menşei


/ Proc / <pid> / environment değeri 0 olsa bile, orada hala bilgi var. “Çekirdeğe bir pencere olarak düşünürseniz daha mantıklıdır. Dosya aslında herhangi bir veri içermez, sadece gerçek işlem bilgilerinin bulunduğu yere işaret eder.” [kaynak] - nevets1219


Cevaplar:


cat /proc/<pid>/environ

Belirli bir çalıştırılabilir çalıştırıcının pid (ler) ini almak istiyorsanız, diğer bir çok olasılık arasından, pidof:

AlberT$ pidof sshd   
30690 6512 

DÜZENLE:

Daha okunabilir bir çıktı elde etmek için @Teddy yorumunu alıntı yapıyorum:

xargs --null --max-args=1 < /proc/<pid>/environ

262
2017-09-17 18:18



Okunabilir hale getirmek için, boş değerleri yeni satırlara dönüştürün: cat /proc/17330/environ | tr \\0 \\n - Dennis Williamson
her zaman yaparım xargs --null --max-args=1 echo < /proc/PID/environ - Teddy
Telleri daha iyi kullan, hızlı. Kedi hala daha hızlı :-) - Nikhil Mulley
Bütün /proc dosya sistemi taşınabilir değildir. - Daniel H
Neden kullanmıyorum anlamıyorum xargsBoş satırları yeni satırlara dönüştürmek, kullanmaktan daha iyidir tr. Birisi benim için bunu yapabilir mi? Teşekkürler. - Jonathan Hartley


Bu sorunun bir unix etiket ve herkes böyle harika bir iş yaptı linux etiketini kullanarak bu bilgileri OS X ve diğer BSD türevli sistemlerde alabilirsiniz.

ps -p <PID> -wwwe

veya

ps -p <PID> -wwwE

ve Solaris ile

/usr/ucb/ps -wwwe <PID>

Solaris ayrıca /proc belirsizliği hatırlamak istemiyorsanız ps Commmand.


52
2017-09-17 20:47



Koşarım ps -p <PID> -wwwe OS X 10.6'da tüm çalışan işlemlerin listesini alırım. Doğru komut ile -E bayrak, değil -e. - drAlberT
OS X 10.4'te test ettim, ancak 10.5 değil. Buna göre güncellendi. - Gerald Combs
Bu mükemmel değil. -E seçeneği sadece raporları ilk Ortam Değişkenleri. Eğer değişkenler çalışma sürecinin kendisi tarafından değiştirilmişse (örn. POSIX putenv () işlevinin kullanılmasıyla), değişiklikler çıktıya yansıtılmaz. ps -p <PID> -wwE. - Kal
Size ait olmayan süreçlerin env biçimini görmek, arzu edilen bir özellik gibi görünür. @ DrAlberT'nin Linux yönelimli yanıtı için de geçerlidir. /proc/PID/environ. Bu dosyalar sadece sürecin sahibi tarafından okunabilir. - Jonathan Hartley
@yani Mümkün, ancak çok daha zor, bir hata ayıklayıcısını çalışan sürece eklemeyi gerektirir. Bu cevabı gör: unix.stackexchange.com/a/70636 - Kal


Diğerleri de belirttiği gibi, Linux'ta / proc'ya bakabilirsin, fakat çekirdek sürümüne bağlı olarak bir veya iki sınır vardır:

Her şeyden önce, çevre dosyası, işlemin oluşturulduğu zaman baktığı ortamı içerir. Bu, sürecin kendi ortamına yapmış olabileceği değişikliklerin / proc'de görünmeyeceği anlamına gelir:

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

İlk kabuk bir giriş kabuğudur ve başlangıçta çok sınırlı bir ortama sahiptir, ancak örneğin, kaynak kullanımıyla büyür. .bashrc ama / proc bunu yansıtmıyor. İkinci kabuk, başlangıçtan itibaren daha büyük çevreyi miras alır, bu yüzden / proc olarak gösterilir.

Ayrıca, daha eski çekirdeklerde, ortam dosyasının içeriği bir sayfa boyutuna (4K) sınırlıdır:

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

2.6.9 (RHEL4) ile 2.6.18 (RHEL5) arasında bir yerde bu sınır ...


24
2017-10-29 11:27



Süreç oluşturulduktan sonra belirlenen uzak bir işlemin çevresel değişkenlerini elde etmek mümkün mü? Bunu VFS üzerinde, / proc / self / environment ile gösteriliyor, ancak sadece sürecin içinde olduğumuz zaman. Ama bunu uzak bir süreç için nasıl edinebilirim? - GP92


Bunu yapmak için BSD seçeneklerinin doğru kullanımı (en azından linux):

ps e $pid

veya

ps auxe  #for all processes

ve evet, ps manpage oldukça kafa karıştırıcı. (üzerinden)


10
2018-03-04 12:15



Ubuntu'm, çevre değişkenlerini komut satırına karşı, aralarında bir boşluk olmaksızın bile parçalara ayırır ve aynı zamanda terminal penceresindeki bir satıra da kırpılır. buldum ps eww $pid 2. problemi düzeltir. - user18911
@ user18911: Env vars, bir null karakter ayırıcısı var. Bu sayfadaki diğer cevaplar, kullanım yollarını gösteriyor xargs veya tr okunabilirlik için bunları yeni satırlara dönüştürmek için. Muhtemelen aradan geçen dört yılda bunu anladınız. - Jonathan Hartley


cat /proc/PID/environ

PID'yi görmek istediğiniz işlemin PID'si ile değiştirin. Çalışan bir işlemle ilgili her bilgi / proc / PID / dizini altındadır.

örnek: kedi / proc / 32512 / ortam


7
2017-09-17 18:19





Linux altında, bir göz atmayı deneyeceğim

/proc/<pid>/environ

6
2017-09-17 18:19





Dan alınan Archlinux wiki:

Değerleri ayrıştırmak için geçici bir işlev oluşturabilirsiniz. /proc/<pid>/environ. Terminal isteminde:

envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }

Sonra istediğiniz işlemin pidiyle, sadece şunu kullanın:

envof <pid>

6
2018-01-13 23:05





Solaris 5.10 için bu çalışır:

pargs -e <PID>

4
2017-08-08 10:04