Unix / Linux'ta süreçler arası iletişimi engellemenin bir yolu var mı?


15

Ağ trafiğini durdurmak / analiz etmek için Wireshark adlı bir yardımcı programımız var .

Unix / Linux'taki iki işlem arasındaki tüm süreçler arası iletişimi durdurmak için benzer bir yardımcı programımız var mı?

Hafızada bazı işlemler yarattım ve birbirleriyle nasıl iletişim kurduklarını profillere sokmam gerekiyor.


1
İletişim için hangi IPC mekanizmalarını kullanıyorsunuz?
axel_c

@axel_c: İşlem kaynağı benimle değil, ancak belgelerin herhangi bir yerinde "Paylaşılan Bellek" i okuduğumu düşünüyorum.
Lazer

Yanıtlar:


19

Bu büyük ölçüde iletişim mekanizmasına bağlıdır.

  • Spektrumun en şeffaf ucunda, süreçler internet soketleri (yani IP ) kullanarak iletişim kurabilir . Daha sonra wireshark veya tcpdump tüm trafiği geri döngü arayüzüne işaret ederek gösterebilir.

  • Orta düzeyde, boruların ve unix soketlerindeki trafik, truss/ strace/ trace/ ..., sistem izlemenin İsviçre ordusu testere ile gözlemlenebilir . Ancak bu süreçleri önemli ölçüde yavaşlatabilir, bu nedenle profil oluşturma için uygun olmayabilir.

  • Spektrumun en opak ucunda, paylaşılan hafıza var. Paylaşılan belleğin temel çalışma prensibi, ilgili her işlemde erişimlerin tamamen şeffaf olmasıdır, yalnızca paylaşılan bellek bölgelerini ayarlamak için sistem çağrılarına ihtiyacınız vardır. Bu hafızanın erişimini dışarıdan izlemek, özellikle zamanlamayı bozmamak için gözlemlere ihtiyacınız varsa zor olacaktır. Linux izleme araç seti (çekirdek düzeltme eki gerektirir) gibi araçları deneyebilir ve yararlı bilgiler elde edip edemeyeceğinizi görebilirsiniz; Solaris'in daha iyi bir araca sahip olmasını beklediğim türden bir alandır (ancak bunun hakkında hiçbir bilgim yok).

    Kaynağa sahipseniz, en iyi seçeneğiniz anahtar kütüphane işlevlerine izleme ifadeleri eklemek olabilir. Bu ile başarılabilir olabilir LD_PRELOADEğer sürece paylaşılan hafızayı erişen programının bir parçası kontrol akışının yeterli anlayışa sahip olarak, (bütün) kaynağına sahip olmasa bile hileler.


6

Bu, bir sürecin ne okuduğunu ve yazdığını gösterecektir:

strace -ewrite -p $PID

Temiz çıktı değil (write (#,) gibi satırları gösterir), ama işe yarıyor! (ve tek satırlıdır: D) Ayrıca, argümanların kısaltılmış olduğu gerçeğini beğenmeyebilirsiniz. Görüntülenen dizelerin maksimum uzunluğunu ayarlayan -s parametresini kullanmak için.

Tüm akışları yakalar, bu yüzden bunu bir şekilde filtrelemek isteyebilirsiniz.

Filtreleyebilirsiniz:

strace -ewrite -p $PID 2>&1 | grep "write(1"

yalnızca tanımlayıcı 1 çağrılarını gösterir. 2> & 1, strader varsayılan olarak stderr'a yazdığı için stderr'ı stdout'a yönlendirmektir.

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.