Yanıtlar:
Durumdaki bir işlem S
genellikle bir dosyaya veya ağa okuma veya yazma veya çağrılan başka bir programın bitmesini bekleme gibi bir engelleme sistem çağrısındadır.
Şu strace -p <pid>
anda hangi sistem çağrısının yapıldığını bulmak için kullanabilirsiniz . Gibi çıktılar üretecek
yazma (1, "foobar" ..., 4096
bu, işlemin "foobar" ile başlayan stdout'a (fd # 1) 4096 bayt yazmaya çalıştığı, ancak yönlendirildiği her şey meşgul ve çıkış arabelleği dolu olduğu anlamına gelir.
Süreçler, genellikle G / Ç olmak üzere bir şey beklerken uyku durumlarına gider.
S
İşleminiz, muhtemelen engelleme yapan okumalar ve yazmalar yaparken geçerli olacaktır . Semaforlarda veya diğer senkronizasyon ilkelerinde beklerken de olabilir.
"Uyandıramazsınız" - yalnızca beklediği veri / kaynak kullanılabilir olduğunda devam eder.
Bu normal ve beklenen bir durumdur ve genellikle bir problem değildir. Genellikle, bu "program" komut satırında dosya olmadan çalışır:
while (<>) { print; }
zamanının çoğunu uyku durumunda geçirir, bu da iyidir - kullanıcı girdisini beklerken CPU'yu boşa harcamasını istemezsiniz.
Bunun bir sorun olduğunu düşünüyorsanız , G / Ç'nizi yapma şeklinizi değiştirmeyi deneyin (daha büyük parçaları okumak, altta yatan cihazın blok boyutunun güzel katlarında, bellek eşlenmiş G / Ç, vb.).