Windows işleminin pid'ini öğrenin. Çekirdek modülü kullanarak Linux'ta bir işlemin PID'sini değiştirme. Linux süreç kontrolü

  • 05.04.2019
Ameliyathane UNIX sistemi Robaçevski Andrey M.

İşlem Kimliği İşlem Kimliği (PID)

Her süreç vardır benzersiz tanımlayıcı Sistem çekirdeğinin süreçler arasında ayrım yapmasını sağlayan PID. ne zaman oluşturulur yeni süreç, çekirdek ona bir sonraki serbest (yani, herhangi bir işlemle ilişkili olmayan) tanımlayıcıyı atar. Tanımlayıcıların atanması artıyor, yani. yeni işlemin kimliği, kendisinden önce oluşturulan işlemin kimliğinden daha büyük. id ulaştıysa maksimum değer, sonraki süreç minimum ücretsiz PID alır ve döngü tekrar eder. İşlem sona erdiğinde, çekirdek işgal ettiği tanımlayıcıyı serbest bırakır.

UNIX İşletim Sisteminin Mimarisi kitabından yazar Bach Maurice J.

4.4 DOSYANIN KOMPOZİT ADININ (ARAMA YOLU) İNDEKS TANIMLAYICIYA DÖNÜŞTÜRÜLMESİ komutları aç, chdir (dizini değiştir) veya bağlantı. Dahili olarak, çekirdek dizinlerle değil, dizinlerle çalışır.

Nadir Bir Meslek kitabından yazar Zuev Evgeniy

tanımlayıcı nedir? Sözdizimi belirsizliklerine ek olarak, başka rahatsızlıklar da hızla su yüzüne çıktı. Bunları örneklerle göstermek daha zor, bu yüzden kelimelerle konuşmanız gerekiyor.C++ dilinin sözdizimi bir başka açıdan da sakıncalı. Kısacası, doğrudan

Programlama kitabından yazar Kozlova Irina Sergeyevna

11. Tanımlayıcı. Anahtar Sözcükler Tanımlayıcı, sayılar, harfler ve özel karakterlerden oluşan bir dizidir. Bu durumda, ilk harf veya özel karakter... Küçük harf kullanabilir veya büyük harfler Latin alfabesi.

200. kitaptan en iyi programlarİnternet için. Popüler öğretici yazar Krainsky I

Proses Koruyucu XP Üreticisi: T.A.S. Bağımsız Programlama (http://www.tas-in Independence-programming.com) Durum: Ücretsiz İndirme Bağlantısı: http://www.tas-in Independence-programming.com/cgi-bin/countdown.pl?Guardian exe.Boyut: 2.4 MB Bu yardımcı programın temel amacı, bilgisayarda çalışan işlemleri yönetmektir.

Microsoft Visual C ++ ve MFC kitabından. Windows 95 ve Windows NT için Programlama yazar Frolov Alexander Vyacheslavovich

tanımlayıcı açık dosya CFile sınıfı, UINT türünün m_hFile veri öğesini içerir. Açık dosyanın tanımlayıcısını saklar. CFile sınıfından bir nesne oluşturduysanız, ancak henüz herhangi bir dosya açmadıysanız, hFileNull sabiti m_hFile içinde yazılır.Genellikle buna gerek yoktur.

UNIX kitabından: Süreç Etkileşimi yazar Stevens William Richard

İşlem Kimliği Zaman aşımı stratejisinin başka bir parçası ve yeniden iletimler istemci isteklerini ve sunucu yanıtlarını tanımak için işlem tanımlayıcılarının (işlem kimliği veya XID) kullanılmasıdır. İstemci RPC işlevini çağırdığında, kitaplık bunu atar.

TCP / IP Mimarisi, Protokoller, Uygulama kitabından (IP sürüm 6 ve IP Güvenliği dahil) tarafından Faith Sidney M

16.7 Zaman Damgası ve Mesaj Kimliği Posta aldığınızda, gönderildiği ve alındığı zamanı bilmek ilginçtir. SMTP, bu bilgiyi iletilen mesaja ekler. Ek olarak, bu protokol, iletilen tüm ana bilgisayarların kaydını tutar. posta mesajı, ve zaman

kitaptan Adobe seçmeleri 3 öğretici yazar yazar bilinmiyor

Dinamik EQ (süreç) Dinamik EQ etkisi, zaman içinde filtreleme miktarını değiştirir. Örneğin, dalganın ilk yarısında yükseltebilirsiniz. yüksek frekanslar ve ikincisinde - etkilenen frekans bandının genişliğini değiştirin. Dinamik EQ penceresinin üç sekmesi vardır: Kazanç, Frekans ve Q (bant genişliği). 1. Frekans grafiği

PHP Yazarın Referansı kitabından

Pan / Genişletici (işlem) Pan / Genişlet efekti, hareket etmenizi sağlar. merkezi kanal(mono) ve sol ve sağ kanalların stereo ayrımını genişletin veya daraltın.Merkez kanal, orta ve surround kanallar kullanılarak kaydırılır stereo kayıt,

Uygulama Geliştirme kitabından Linux ortamı... İkinci baskı yazar Johnson Michael K.

Uzatma (işlem) Uzatma efekti, perdeyi (perdeyi) değiştirmenize olanak tanır ses sinyali, hız veya her ikisi. Örneğin, bir fonogramın perdesini süresini değiştirmeden artırmak için bu efekti kullanabilir veya tam tersi, değiştirmeden süreyi değiştirebilirsiniz.

Firebird VERİTABANI TASARIMCI KILAVUZU kitabından Borri Helen tarafından

Oturum Kimliği Bu nedenle, oturum kimliği, komut dosyası çalıştırmaları arasında oturum verilerini depolamak için kullanılacak geçici depolamanın adıdır. Bir SID - bir mağaza. SID yok, depolama yok ve tam tersi.Peki, tanımlayıcı ve ad nasıl ilişkilidir?

kitaptan İşletim sistemi UNIX yazar Robaçevski Andrey M.

10.2.1. İşlem Kimliği ve Köken En temel niteliklerden ikisi, işlem kimliği veya pid ve onun üst işleminin kimliğidir. pid benzersiz bir şekilde tanımlayan pozitif bir tamsayıdır

Yazarın kitabından

10.2.3. Dosya sistemi kullanıcı kimliği Çok özel durumlarda, bir programın kendi bilgilerini kaydetmesi gerekebilir. kök hakları erişim dışında her şey için dosya sistemiözel bir kullanıcı kimliği kullandığı yer. Başlangıçta Linux NFS sunucu alanında kullanılır

Yazarın kitabından

Etki Alanı Kimliği Veritabanında bir etki alanı oluştururken, veritabanında global olarak benzersiz olan bir etki alanı kimliği belirtmelisiniz. Geliştiriciler, belgeleri geliştirmek için genellikle alan tanımlayıcılarında bir ön ek veya son ek kullanır. Örneğin: OLUŞTUR

Yazarın kitabından

Yazarın kitabından

Ana İşlem Kimliği (PPID) Bunu oluşturan işlemin tanımlayıcısı



Bu yazıda zaten PID'yi değiştirebilen bir çekirdek modülü oluşturmaya çalışacağız. çalışan süreç Linux işletim sisteminde ve değiştirilmiş bir PID alan işlemlerle denemeler yapın.


Bir uyarı: PID'yi değiştirmek standart olmayan bir işlemdir ve belirli koşullar altında çekirdek paniğine neden olabilir.

Bizim test modülü işlemin PID'yi değiştireceği okumada karakter cihazı / dev / testi uygulayacaktır. Bu makale sayesinde bir karakter cihazının uygulanmasına bir örnek için. Kodu tamamla Modül makalenin sonunda verilmiştir. Tabii ki, en doğru karar eklemek oldu sistem çağrısıçekirdeğin içine, ancak bunun için çekirdeğin yeniden derlenmesi gerekir.

Çevre

Modülü test etmek için tüm eylemler sanal bir ortamda gerçekleştirildi. Sanal Kutu makinesi 64 bit Linux dağıtımı ve çekirdek sürümü 4.14.4-1 ile. Makine ile iletişim SSH kullanılarak gerçekleştirildi.

Deneme # 1 basit çözüm

Mevcut hakkında birkaç kelime: değişken current, çekirdekteki işlemin (PID, UID, GID, cmdline, ad alanları, vb.)

İlk fikir, current-> pid parametresini çekirdek modülünden istenene değiştirmekti.

Statik ssize_t device_read (struct dosyası * filp, char * tampon, size_t uzunluk, loff_t * offset) (printk ("PID:% d. \ N", akım-> pid); akım-> pid = 1; printk ("yeni PID:% d. \ N ", akım-> pid);,)
Modülün işlevselliğini test etmek için C++ ile bir program yazdım:

#Dahil etmek #Dahil etmek #Dahil etmek int ana () (std :: cout<< "My parent PID " << getppid() << std::endl; std::cout << "My PID " << getpid() << std::endl; std::fstream f("/dev/test",std::ios_base::in); if(!f) { std::cout << "f error"; return -1; } std::string str; f >> str; standart :: cout<< "My new PID " << getpid() << std::endl; execl("/bin/bash","/bin/bash",NULL); }
Modülü insmod komutu ile yükleyin, / dev / test oluşturun ve deneyin.

# ./a.out Ebeveynim PID 293 Benim PID 782'm Yeni PID 782'm
PID değişmedi. Belki de PID'nin belirtildiği tek yer burası değildir.

Deneme # 2 ek PID alanı

Current-> pid işlem kimliği değilse, nedir? getpid () koduna hızlı bir bakış, Linux sürecini ve çekirdek kaynağındaki pid.c dosyasını tanımlayan task_struct yapısını gösterir. Gerekli işlev __task_pid_nr_ns'dir. İşlev kodu, task-> pids.pid çağrısını içerir, bu parametreyi değiştireceğiz

Derleme, deneme

SSH üzerinden test ettiğim için, çekirdek çökmeden önce programın çıktısını alabildim:

Ebeveynim PID 293 PID'im 1689 Yeni PID'm 1689
İlk sonuç zaten bir şeydir. Ancak PID hala değişmedi.

Deneme # 3 dışa aktarılmamış çekirdek sembolü

pid.c'ye daha yakından bakmak, ihtiyacımız olanı yapan bir işlev verdi
static void __change_pid (struct task_struct * görev, enum pid_type türü,
struct pid * yeni)
İşlev, PID'yi, PID türünü ve aslında yeni PID'yi değiştirmenin gerekli olduğu bir görevi kabul eder. Yeni PID, işlev tarafından oluşturulur.
struct pid * alloc_pid (pid_namespace yapısı * ns)

Bu işlev yalnızca yeni PID'nin içinde olacağı ad alanını kabul eder, bu alan task_active_pid_ns kullanılarak elde edilebilir.
Ancak bir sorun var: bu çekirdek sembolleri, çekirdek tarafından dışa aktarılmaz ve modüllerde kullanılamaz. Bu sorunu çözerken harika biri bana yardımcı oldu. find_sym fonksiyon kodu oradan alınır.

Statik asmlinkage void (* change_pidR) (struct task_struct * task, enum pid_type türü, struct pid * pid); statik bağlantı yapısı pid * (* alloc_pidR) (struct pid_namespace * ns); static int __init test_init (void) (printk (KERN_ALERT "TEST sürücüsü yüklendi! \ n"); change_pidR = find_sym ("change_pid"); alloc_pidR = find_sym ("alloc_pid"); ...) static ssize_t device_read (yapı dosyası * filp, char * tampon, size_t uzunluk, loff_t * offset) (printk ("PID:% d. \ n", akım-> pid); struct pid * newpid; newpid = alloc_pidR (task_active_pid_ns (geçerli)); change_pidR (geçerli) , PIDTYPE_PID, newpid); printk ("yeni PID:% d. \ N", mevcut-> pid); ...)
iltifat, fırlatma

Ebeveynim PID 299 PID 750'm Yeni PID 751'im
PID değişti! Çekirdek, programımıza otomatik olarak ücretsiz bir PID tahsis etti. Ancak PID 1 gibi başka bir işlemin devraldığı bir PID kullanmak mümkün müdür? Tahsisten sonra kod ekleyin

Newpid-> sayılar.nr = 1;
iltifat, fırlatma

Ebeveynim PID 314'üm PID 1172 Yeni PID'm 1
Gerçek PID 1'i alıyoruz!

Bash, % n komutunu açma görevinin çalışmadığı, ancak diğer tüm işlevlerin iyi çalıştığı bir hata verdi.

Değişen PID'li süreçlerin ilginç özellikleri

PID 0: giriş çıkış yapılamaz

Kodlara geri dönelim ve PID'yi 0 olarak değiştirelim.

Newpid-> sayılar.nr = 0;
iltifat, fırlatma

Ebeveynim PID284'üm PID 1517 Yeni PID'm 0
Yani PID 0 o kadar özel değil mi? Mutluyuz, çıkış yazıyoruz ve ...

Çekirdek düşüyor! Çekirdek, görevimizi BOŞTA GÖREV olarak tanımladı ve tamamlandığını görünce çöktü. Görünüşe göre, sonlandırmadan önce programımız kendisine "normal" PID'yi döndürmelidir.

Görünmez süreç

Kodlara geri dönelim ve boş olması garanti edilen PID'yi ayarlayalım
newpid-> sayılar.nr = 12345;

iltifat, fırlatma

Ebeveynim PID296'm PID 735'im Yeni PID'm 12345
Bakalım neler var / proc

1 148 19 224 288 37 79 86 93 konsollar fb kcore kilitleri bölüm takasları sürüm 10 149 2 226 29 4 8 87 acpi cpuinfo dosya sistemleri anahtar kullanıcıları meminfo sched_debug sys vmallocinfo 102 15 20 23 290 5 80 88 asound kripto fs anahtarları misc schedstat-sys tetik vmstat 11 16 208 24 291 6 81 89 buddyinfo cihazları kesintiler kmsg modülleri scsi sysvipc zoneinfo 12 17 21 25 296 7 82 9 veri yolu diskstats iomem kpagecgroup mounts self thread-self 13 176 210 26 3 737 83 90 cgroups dma ioports kpagecount mtrr 139 18 22 27 30 76 84 91 cmdline sürücüsü irq kpageflags net softirqs tty 14 182 222 28 31 78 85 92 config.gz execdomains kallsyms loadavg pagetypeinfo stat çalışma süresi
Gördüğünüz gibi / proc ücretsiz bir PID ödünç alsak bile sürecimizi tanımlamıyor. Önceki PID de / proc içinde değil, bu çok garip. Farklı bir ad alanında olabiliriz ve bu nedenle ana / proc tarafından görülemeyebiliriz. Yeni / proc'u monte edin ve orada ne olduğunu görün

1 14 18 210 25 291 738 81 9 veri yolu cihazları fs anahtar kullanıcıları kilitleri pagetypeinfo softirqs timer_list 10 148 182 22 26 296 741 82 90 cgroups diskstats interrupts key meminfo bölümleri stat tty 102 149 19 222 27 30 76 83 92 cmdline dma iomem kmsg misc sched_debug takas çalışma süresi 11 15 2 224 28 37 78 84 93 config.gz sürücüsü ioports kpagecgroup modülleri schedstat sys version 12 16 20 226 288 4 79 85 acpi konsolları execdomains irq kpagecount mounts scsi sysrq-trigger vmallocinfo olarak 23 29 6 8 17 208 cpuinfo fb ​​​​kallsyms kpageflags mtrr self sysvipc vmstat 139 176 21 24 290 7 80 87 buddyinfo kripto dosya sistemleri kcore loadavg net slabinfo thread-self zoneinfo
Daha önce olduğu gibi, işlemimiz orada değil, yani normal bir ad alanındayız. Hadi kontrol edelim

Not -e | grep bash
296 puan / 0 00:00:00 bash

Programı çalıştırdığımız tek bir bash. Ne önceki PID ne de mevcut olan listede yok.

Bilgisayar yönetimi kolay görünüyor, ama öyle mi? Kilometre makine kodu, programların, kaynakların ve kullanıcının etkileşiminin organizasyonu. Sadece uygun bir ortam yaratmak değil, aynı zamanda ona daha fazla geliştirme ve optimizasyon fırsatı vermek de önemlidir. Geliştiricilerin mevcut araçları kullanması kalır.

İşletim sistemi işlevleri

Bir pid'in ne olduğu sorusunu yanıtlamadan önce, tanımlayıcı işlevlerin uygulanmasına bağlı olduğu işlevselliği anlamak önemlidir:

  • verilerle çalışma, yazılımı başlatma ve durdurma;
  • giriş / çıkış cihazlarıyla etkileşim;
  • rastgele erişimli belleğin dağıtımı ve organizasyonu;
  • uçucu ortamlara erişim sağlamak;
  • makine kaynaklarının optimizasyonu;
  • her nesnenin makinenin kaynaklarına güvenli erişiminin sağlanması;
  • güvenilir bilgi işlem;
  • verilerin kötü amaçlı yazılımlardan ve kasıtlı bilgisayar korsanlığından korunması.


Temel konseptler

Daha fazla anlatım aşağıdaki kavramlara dayalı olacaktır. Bu noktayı göz ardı etmek, pid'in ne olduğunu anlamayı zorlaştırır.

İşlem, ISO standardı tarafından tanımlandığı şekilde sistem kaynaklarını kullanan herhangi bir nesnedir. 9000: 2000, etkileşimi gelen verileri giden verilere dönüştüren bir dizi işlemdir.

Herhangi bir işlem birkaç parametre ile karakterize edilir:

  • makine kodu;
  • yürütülebilir kod;
  • ayrılmış bir bellek yığını (bazen sanal);
  • güvenlik özellikleri;
  • giriş / çıkış verileri;
  • her nesnenin etkinliğini izleyen bir çağrı yığını;
  • işlem ve hesaplamaların ara sonuçlarını depolayan sözde "yığın".

İşlem, başladığı andan itibaren veya istendiğinde işletim sistemi tarafından oluşturulur. Tamamlama, istatistiksel bilgiler toplanarak, ardından silerek ve zamanlama kuyruğu ve kaynak tahsisi ile etkileşime girerek gerçekleşir. Teorik temel bittiğinde, en önemli soruyu cevaplamanın zamanı geldi, pid nedir.

tanımlayıcı kavramı

Çalışan her program, etiketli benzersiz bir numara ile tanımlanır veya tanınır. Böylece sistem her süreçle etkileşime girer.

İşaretçiye daha yakından bakmak için iki yoldan gidebilirsiniz:

  1. Görev çubuğu üzerinde farenin sağ tuşu ile görev yöneticisini çağırıyoruz. Ardından, "İşlemler" sekmesine gidin, "Görünüm" menüsünü seçin. Açılan iletişim kutusunda "Sütun seç" öğesini buluyoruz, PID için bir onay işareti koyuyoruz. Komut satırına görev listesi yazın.
  2. Bir diğer taktik de Unix sistemleri için geçerlidir. Burada ps komutunu kullanmanız önerilir. Yardımı ile belirli bir programın tanımlayıcısını bulabilirsiniz.

Potansiyel olarak kötü amaçlı yazılımları aramak için benzersiz bir numara kullanmasına izin verilir. Gerçek şu ki, virüsler genellikle "uygun" dosyalar olarak gizlenirken, işaretçi söz konusu nesnenin güvenliği hakkında net bir fikir verir. Sistemin kod akışından ve daha az önemli süreçlerden "pid nedir" tanımlayabilmeniz yeterlidir.

Modern programlama dilleri, ilgilenilen bir nesne hakkındaki bilgileri sıradan bir sayıdan "yalıtmayı" mümkün kılar. Programatik düzeyde, doğrudan pid ile etkileşime giren kod geliştirebilirsiniz. Bu ne işe yarıyor? Birkaç tıklama pahasına, ilgilendiğiniz dosyanın veya programın tam yolunu gösterebileceksiniz. Aslında bu, yalnızca sistemin çalışmasını (gerekli kaynakların miktarını) anlamayı ve optimize etmeyi değil, aynı zamanda makineyi potansiyel bir tehditten korumayı da sağlayacaktır.

kafan karışmasın diye

Elektronikte, otomatik kontrol sistemlerinde kullanılan bir elektronik cihaz olan bir pid denetleyicisi de vardır. Sadece bir kontrol sinyali oluşturmaya değil, aynı zamanda geçici sürecin doğruluğunu ve kalitesini etkilemeye de izin verir.

Birçok kullanıcı iki kavramı karıştırır, ancak bunlar tamamen farklıdır. Makaleyi okuduktan sonra, verilen bilgiler işaretçinin tam bir tanımını ve olanaklarını verdiği için "bir sürecin pid'i nedir" sorusu nihayet çözülmelidir. "İşletim sisteminin" işleyişinin doğrudan temel sistemin her bir vidasına bağlı olduğunu anlamak önemlidir. Günümüzde bilgisayarın sadece küçük bir kısmı makine olarak kabul edilmiştir.

Linux işletim sisteminin kendini otomatik olarak halledebileceğini düşünüyor musunuz? Her şey yolunda gittiğinde veya standart dışı özelliklere ihtiyacınız olmadığında, evet. Ancak bazen onun işine müdahale etmeniz gerekebilir.

Linux'ta, her bir program için, başladığında bir süreç oluşturulur. Programı manuel olarak kendiniz mi çalıştırdığınız veya sistem mi yoksa çekirdek mi çalıştırdığınız önemli değil. Örneğin, çekirdeğin yüklenmesini tamamladıktan hemen sonra başlatılan başlatma programı, 0 tanımlayıcısı ile kendi işlemine de sahiptir. Linux'taki işlemler, programın durumu ve yürütülmesi ile ilgili tüm bilgilerin depolandığı kaplar olarak tanımlanabilir. . Program iyi çalışıyorsa, her şey yolundadır, ancak kilitleniyorsa veya çalışması için yapılandırmanız gerekiyorsa, Linux'ta süreçleri yönetmeniz gerekebilir.

Bu makale kapsamlı bir konuyu kapsayacak, bu tür olasılıkları ele alacağız:

  • Çalışan süreçleri görüntüleyin
  • İşlemler hakkındaki bilgileri görüntüleme
  • Linux'ta süreçleri bulma
  • Süreçlerin önceliğini değiştirme
  • Sonlandırma süreçleri
  • Bir işlem için kullanılabilir belleği sınırlama

Makaleye ilk noktaları eklemeden edemedim, ancak bunlar çok basit ve onları ayrıntılı olarak analiz etmeyeceğiz. Ancak diğer her şey karmaşık ve yetersiz tanımlanmış görünebilir.

Terimleri anlayarak başlayalım. Temel olarak, bir süreç her programdır. Dediğim gibi her program çalıştırması için ayrı bir işlem oluşturuluyor. Sürecin bir parçası olarak programa işlemci zamanı, RAM ve diğer sistem kaynakları tahsis edilir. Her işlemin kendi tanımlayıcısı, İşlem Kimliği veya en sık Linux işlemlerini tanımlamak için kullanılan PID'si vardır. PID tesadüfen belirlenmez, daha önce de söylediğim gibi, başlatma programı PID 1'i alır ve sonraki her çalışan program bir tane daha alır. Böylece, kullanıcı programlarının PID'si zaten birkaç bine ulaşıyor.

Aslında Linux süreçleri size şimdi göründüğü kadar soyut değil. Onlara dokunmaya çalışmak oldukça mümkündür. Dosya yöneticinizi açın, kök dizine gidin ve ardından / proc klasörünü açın. Burada bir sürü sayı görüyor musunuz? Hepsi bu kadar - çalışan tüm süreçlerin PID'si. Bu klasörlerin her biri süreçle ilgili tüm bilgileri içerir.

Örneğin, 1. işlemin klasörüne bakalım. Klasör, dizinler için başka dosyalar ve birçok dosya içerir. cmdline dosyası, işlemi başlatmak için komut hakkında bilgi içerir:

kedi / proc / 1 / cmdline

/ usr / lib / systemd / systemd

Systemd init sistemini kullandığım için onun için ilk işlem başlatılıyor. Her şey / proc dizini ile yapılabilir. Ancak bu, özellikle sistem üzerinde çalışan işlemlerin sayısı göz önüne alındığında çok elverişsizdir. Bu nedenle, gerekli görevlerin uygulanması için özel araçlar vardır. Linux'ta süreç kontrolünü uygulamanıza izin veren yardımcı programları incelemeye devam edelim.

Linux süreç kontrolü

Linux, çeşitli süreçleri yönetme görevlerini çözmek için çok sayıda yardımcı programa sahiptir. Bunlar, htop, top gibi çok işlevli çözümler ve ayrıca basit yardımcı programlar, örneğin ps, kill, killall, who, vb. Bu makalede grafik yardımcı programları dikkate almayacağım ve üstte de dikkate almayacağım. Birincisi çok basit olduğu için, ikincisi ise htop daha iyi olduğu için. htop ve onun GNU tarzı yardımcı program benzerleriyle, bir yardımcı program bir işlevle çalışmaya odaklanacağız.

Halihazırda yoksa htop'u yükleyelim. Ubuntu'da şöyle yapılır:

sudo apt yükleme htop

Diğer dağıtımlarda paket yöneticinizi kullanmanız yeterlidir. Paket adı aynı.

Çalışan süreçleri görüntüleyin

Bu çok basit bir iştir ve çözülmesi de kolaydır. Bunun için normal ps'den daha gelişmiş interaktif top, htop vb.'ye kadar birçok yardımcı program vardır.

Htop'u açtığımızda, hemen çalışan işlemlerin bir listesini görüyoruz. Elbette burada tüm linux işlemleri görüntülenmiyor, sistemde birçoğu var, zaten biliyorsunuz, hepsi bir ekrana sığmayacak. Varsayılan olarak, kullanıcınız olarak başlatılan işlemler listelenir:

İşlemle ilgili aşağıdaki bilgileri görebilirsiniz:

  • PID- işlem kimliği
  • KULLANICI- işlemin başlatıldığı kullanıcı
  • PRI- linux işleminin çekirdek düzeyinde önceliği (genellikle NI + 20)
  • NI- -20'den 19'a kadar sürecin önceliği
  • S- süreç durumu
  • İşlemci- kullanılan işlemci kaynakları
  • MEM- kullanılan hafıza
  • ZAMAN- işlem süresi

Ekrana ek parametreler ekleyebilirsiniz, ancak bunlar ana parametrelerdir. Kurulum menüsünü kullanarak parametreler ekleyebilirsiniz. Orada her şey çok basit, ipuçlarını okuyun ve talimatları izleyin. Örneğin, PPID parametresi eklendi:

Programın çok önemli bir özelliği de Linux'ta işlemleri istediğiniz parametreye göre sıralayabilmenizdir. Sadece parametre adına tıklayın, yeşil renkle vurgulanacak ve sıralama gerçekleştirilecektir. Örneğin, işlemlerin hangi sırayla başladığını görmek istiyorsanız, PID'ye göre sıralayın:

İşlemleri bir ağaç şeklinde düzenlemek için ilginç bir fırsat da var. Hangi sürecin bu veya bu süreci başlattığını görebileceksiniz. Ağacı görüntülemek için F5 tuşuna basın:

Aynı şeyi ps ile de yapabilirsiniz. Sadece burada böyle uygun bir etkileşimli mod yoktur. Her şey seçeneklerle yapılır.

Kullanacağımız ana seçenekleri ele alalım:

  • -e- tüm işlemler hakkında bilgi görüntüleme
  • -a- en sık istenen işlemlerle ilgili bilgileri görüntüleyin
  • -T- yalnızca bu terminaldeki işlemleri göster
  • -P- yalnızca belirtilen süreçle ilgili bilgileri göster
  • -u- yalnızca belirli bir kullanıcının işlemlerini göster

Kısacası, linux'ta şu anda aktif olan tüm süreçleri görüntülemek için aux seçeneklerinin bir kombinasyonu kullanılır:

Program aynı parametreleri gösterir, yalnızca etkileşimli bir arayüz yoktur. Buradaki süreçleri sıralamanın imkansız olduğunu düşünüyorsunuz ama yanılıyorsunuz, yapabilirsiniz. Bunun için bir sıralama seçeneği var. Bunları herhangi bir alana göre sıralayabilirsiniz, örneğin:

ps aux --sort = %mem

Liste, altta daha fazla değer ve üstte daha az değer olacak şekilde ters sırada sıralanacaktır. Gerekirse ters sırada bir eksi ekleyin:

ps aux --sort = -% işlemci

Sıralama alanı olarak Linux işlem öncelikleri veya diğer parametreler kullanılabilir. Tüm bilgileri görüntülemeniz gerekmiyorsa çıktıyı da kesebilirsiniz:

ps'nin işlem ağaçlarına maliyet vermenin hiçbir yolu yok gibi görünüyor. Ama gerçekten değil, bunun için ayrı bir komut var:

Linux'ta süreçleri bulma

İşlemlerin listesi iyidir. Ama bazen, bir süreç kilitlendiğinde ve Linux sürecini öldürmemiz gerektiğinde veya onunla bir işlem yapmamız gerektiğinde, bu süreci listeden seçmemiz, PID'sini ve bununla ilgili bilgileri bulmamız gerekiyor.

Htop'ta linux işlemini bulmak için F3 tuşunu kullanabilirsiniz. F3'e basın ve istediğiniz kelimeyi yazın. Ardından, bir sonraki oluşuma gitmek için F2 veya Esc tuşuna basarak aramayı tamamlayın:

htop'taki işlemleri bulmak için htop filtresini de kullanabilirsiniz. F4'e basın, bir kelime girin ve sadece adı bu kelimeyi içeren linux işlemleri görüntülenecektir.

ps'de filtreleme yoktur, ancak linux işlemini bulmak için ps çıktısını yeniden yönlendirerek grep'i kullanabiliriz:

ps yardımcı | grep krom

Bu çok yaygın olarak kullanılan bir komuttur.

Süreçlerin önceliğini değiştirme

Linux işlem önceliği, bu işleme diğerlerine kıyasla ne kadar daha fazla CPU zamanının ayrılacağı anlamına gelir. Böylece hangi programın daha hızlı çalışacağını ve hangilerinin daha yavaş çalışacağını çok ince ayarlayabiliriz. Öncelik değeri 19 (minimum öncelik) ile -20 - linux sürecinin maksimum önceliği arasında değişebilir. Ayrıca, normal bir kullanıcının haklarıyla önceliği azaltabilirsiniz, ancak artırmak için süper kullanıcı haklarına ihtiyacınız var.

Htop, önceliği kontrol etmek için Nice parametresini kullanır. Priv'in sadece bir değişiklik olduğunu hatırlatmama izin verin, çoğu durumda Nice için 20'den fazla. Bir işlemin önceliğini değiştirmek için imleci üzerine getirin ve sayıyı azaltmak (önceliği artırmak) için F7'ye veya F8'e basın. - sayıyı artırmak için.

Ancak bu Linux işlemlerini yönetmek için de htop kullanmanıza gerek yoktur. Her şeyi diğer komutlarla yapabilirsiniz. Örneğin, güzel komut. Bunu kullanarak, başlatılan işlem için önceliği belirleyebilirsiniz:

nice -n 10 apt-get yükseltmesi

Veya mevcut olanın önceliğini pid'sine göre değiştirin:

renice -n 10 -p 1343

Linux'ta sonlandırma işlemleri

İşlem donmuşsa ve yanıt vermiyorsa sonlandırılmalıdır. Htop'ta, bir Linux işlemini sonlandırmak için imleci işlemin üzerine getirin ve F9'a basın:

Sistem süreçleri kontrol etmek için belirli sinyalleri kullanır, sürecin biteceğini gösteren sinyaller vardır. İşte bazı temel sinyaller:

  • SIGKILL- işlemin verileri kaydetmesini ve sonlandırmasını isteyin
  • SIGTERM- kaydetmeden işlemi hemen sonlandırın

Genel olarak, birkaç düzine sinyal vardır, ancak bunları dikkate almayacağız. SIGKILL sinyalini gönderelim:

Ayrıca kill yardımcı programını da kullanabilirsiniz:

İşlemi adıyla da öldürebilirsiniz:

öldürücü krom

Sınırlayıcı süreçler

Linux süreç kontrolü, neredeyse her şeyi kontrol etmenizi sağlar. Ne yapılabileceğini zaten gördünüz, ancak daha fazlası yapılabilir. ulimit komutu ve /etc/security/limits.conf yapılandırma dosyasıyla, işlemlerin bellek, dosyalar ve işlemci gibi sistem kaynaklarına erişmesini kısıtlayabilirsiniz. Örneğin, bir Linux işleminin belleğini, dosya sayısını vb. sınırlayabilirsiniz.

Dosya girişi şöyle görünür:

<домен> <тип> <элемент> <значение>

  • ihtisas- kullanıcı adı, grup adı veya UID
  • bir çeşit- kısıtlama türü - yumuşak veya sert
  • eleman- sınırlı olacak bir kaynak
  • anlam- gerekli sınır

Kesin sınırlar süper kullanıcı tarafından belirlenir ve normal kullanıcılar tarafından değiştirilemez. Soft, soft limitler ulimit komutu kullanılarak kullanıcılar tarafından değiştirilebilir.

İşlemlere uygulanabilecek ana kısıtlamaları ele alalım:

  • dosya yok
  • olarak- maksimum RAM miktarı
  • yığın- maksimum yığın boyutu
  • İşlemci- maksimum işlemci süresi
  • nproc- maksimum işlemci çekirdeği sayısı
  • kilitler- kilitli dosya sayısı
  • Güzel- sürecin maksimum önceliği

Örneğin, sergiy kullanıcısının işlemleri için işlemci süresini sınırlayalım:

sergiy sert nproc 20

Proc klasöründe belirli bir işlem için kısıtlamaları görüntüleyebilirsiniz:

cat / proc / PID / limitler

Maksimum işlemci süresi sınırsız sınırsız saniye
Maksimum dosya boyutu sınırsız sınırsız bayt
Maksimum veri boyutu sınırsız sınırsız bayt
Maksimum yığın boyutu 204800 sınırsız bayt
Maksimum çekirdek dosya boyutu 0 sınırsız bayt
Maksimum yerleşik, sınırsız sınırsız bayt seti
Maksimum süreç 23562 23562 süreç
Maksimum açık dosya 1024 4096 dosya
Maksimum kilitli bellek 18446744073708503040 18446744073708503040 bayt
Maksimum adres alanı sınırsız sınırsız bayt
Maksimum dosya kilitleri sınırsız sınırsız kilit
Maksimum bekleyen sinyaller 23562 23562 sinyaller
Maks. mesaj kuyruğu boyutu 819200 819200 bayt
Maks iyi öncelik 0 0
Maksimum gerçek zamanlı öncelik 0 0
Maksimum gerçek zamanlı zaman aşımı sınırsız sınırsız us

Bu şekilde değiştirilen kısıtlamalar, yeniden başlatmanın ardından geçerli olacaktır. Ancak ulimit komutunu kullanarak mevcut kabuk ve oluşturduğu işlemler için de limitler belirleyebiliriz.

İşte komut seçenekleri:

  • -S- yumuşak sınırlama
  • -H- zor sınır
  • -a- tüm bilgileri göster
  • -F- oluşturulan dosyaların maksimum boyutu
  • -n- maksimum açık dosya sayısı
  • -s- maksimum yığın boyutu
  • -T- maksimum işlemci süresi miktarı
  • -u- maksimum çalışan işlem sayısı
  • -v- maksimum sanal bellek miktarı

Örneğin, açılabilecek dosya sayısı için yeni bir sınır belirleyebiliriz:

Şimdi bakıyoruz:

RAM limitini belirleyelim:

ulimit -Sv 500000

Bu sınırlamanın bu terminalde çalışan tüm programlar için geçerli olacağını hatırlatmama izin verin.

sonuçlar

Bu kadar. Artık Linux'ta süreç yönetimi size herhangi bir sorun yaşatmayacak. Bu konuyu çok detaylı olarak ele aldık. Makaleyi tamamlamak için herhangi bir sorunuz veya öneriniz varsa, yorumları yazın!