Güzel değer veya CPU hisseleri?
Günümüzde, özellikle de sistemd kullanılırken otomatik görev gruplaması nedeniyle iyi değerlerin "sistem çapında" çok önemli olmayabileceğini lütfen unutmayın . Lütfen daha fazla ayrıntı için bu cevaba bakınız.
Dişler ve işlemler arasındaki fark
Linux'taki önemli soru, çünkü dokümantasyon şüpheleri sürdürür (örneğin, kendi PID'lerine sahip olmayan konular hakkında).
Not: Bu cevap tam olarak Linux konularını açıklar.
Kısacası: Çekirdek yalnızca "çalıştırılabilir varlıkları", yani çalıştırılabilir ve zamanlanmış bir şeyi işler . Çekirdek bilge, bu varlıklara süreç denir. Bir iş parçacığı, yalnızca en azından bellek alanını ve sinyal işleyicilerini başka biriyle paylaşan bir tür işlemdir.
Böyle bir işlemin sistem genelinde benzersiz bir tanıtıcısı vardır: PID (İşlem Kimliği). Sözde konu başlıkları için, bazen TID (Konu Kimliği) olarak adlandırılır, ancak sysadmin (ve çekirdek!) Bakış açısından, TID ve PID aynı şeydir (aynı ad alanını paylaşırlar).
Sonuç olarak, olabilir renice
onların her bir "diş" sahip bireysel çünkü kendi PID 1 .
Tüm PID'leri yinelemeli olarak bulmarenice
İşlenecek sürecin soyundan gelen (çocuklarda veya iş parçacığı grubunda) tüm işlemlerin ("normal" veya "iş parçacığı") PID'lerini almamız gerekir. Bu özyinelemeli olmalı (çocukların çocukları göz önüne alındığında).
Anton Leontiev cevap bu konuda ipucu veriyor: içindeki tüm klasör isimleri, potansiyel çocuk işlemlerini listeleyen /proc/$PID/task/
bir children
dosya içeren iş parçacığının PID'sidir .
Ancak özyinelemeden yoksun, bu yüzden onları bulmak için hızlı ve kirli bir kabuk betiği:
#!/bin/sh
[ "$#" -eq 1 -a -d "/proc/$1/task" ] || exit 1
PID_LIST=
findpids() {
for pid in /proc/$1/task/* ; do
pid="$(basename "$pid")"
PID_LIST="$PID_LIST$pid "
for cpid in $(cat /proc/$1/task/$pid/children) ; do
findpids $cpid
done
done
}
findpids $1
echo $PID_LIST
Yinelemeli olarak güzel olmasını istediğiniz süreç PID 1234 ise, şimdi yapabilirsiniz:
renice -n 15 -p $(/path/to/findchildren.sh 1234)
1 POSIX uyumu için, çağrıda Not getpid(2)
bir iş parçacığı içinde olacak değil bu katedilebilen varlığın sistem genelinde benzersiz kimliği (PID) vermek değil, "iş parçacığı grubu" içinde ana sürecin PID. Bunun gettid(2)
yerine aramanız gerekir . Daha fazla bilgi için bu cevaba bakınız .
man (7) pthreads
Geçerli (NPTL) uygulama hakkında şunları söylüyor: "bir işlemdeki tüm iş parçacıkları aynı iş parçacığı grubuna yerleştirilmiş; iş parçacığı grubunun tüm üyeleri aynı PID'yi paylaşıyor" ve "Dişler ortak bir hoş değeri paylaşmıyor". Öyleyse, kendi PID'sine sahip olmayanrenice
bir diziyi, bunu yapmak için bir PID kullandığında nasıl yenileyebilirsiniz ?