İlk başta bulduğum bilgilere dayanarak ihaleye xterm
geri bir kaç saniye izlemeye çalıştım ama gevşekti. Demek istediğim, işe yaradı bence, ama en iyi koşuldaydı - Dosyanın sağladığı tüm bilgileri tam olarak anlamadım ve sadece içeriği ve bilinen terminal işlemleri arasında karşılık gelen görünüme uyuyordu.xterm
/proc/locks
Sonra ptys arasında lsof/strace
aktif bir write/talk
süreç izlemeye çalıştım . Daha önce hiç bir programı kullanmamıştım, ancak güveniyorlardı utmp
. Hedef kitlemin utmp
herhangi bir sebepten dolayı girişi yoksa, ikisi de var olduğunu kabul etmeyi reddetti. Belki bunun bir yolu vardır, ama onu bırakacak kadar kafam karıştı.
udevadm
136 ve 128 büyük sayıdaki cihaz düğümleriyle keşfedilen pts
ve ptm
sırasıyla reklamı yaptığım bazı keşifleri denedim /proc/tty/drivers
, ancak aynı zamanda bu araçla ilgili çok yararlı bir deneyimim olmadı ve bir kez daha önemli bir şey ortaya çıktı. İlginçtir, yine de, :min
her iki cihaz türünün de bir şaşırtıcıda listelendiğini fark ettim 0-1048575
.
Bu çekirdek dokümanı tekrar ziyaret edene kadar , sorun hakkında mount
s açısından düşünmeye başladım . Daha önce birkaç kez okumuştum, ancak bu doğrultuda araştırmalar sürdüğü zaman beni bu 2012 /dev/pts
yamalı setine yönlendirdi :
sudo fuser -v /dev/ptmx
Düşündüm Genellikle bir ile ilişkilendirmek süreçlere ne kullanıyorsunuz mount
? Ve elbette:
USER PID ACCESS COMMAND
/dev/ptmx: root 410 F.... kmscon
mikeserv 710 F.... terminology
Yani bu bilgilerle, örneğin terminology
:
sudo sh -c '${cmd:=grep rchar /proc/410/io} && printf 1 >/dev/pts/0 && $cmd'
###OUTPUT###
rchar: 667991010
rchar: 667991011
Gördüğünüz gibi, biraz kesin bir testle, keyfi bir pty'nin usta sürecini oldukça güvenilir bir şekilde çıkarmak için böyle bir işlem yapılabilir. Soketler ile ilgili socat
olarak, bir hata ayıklayıcının aksine kullanmanın o yönden yaklaşabileceğinden oldukça eminim , ancak henüz nasıl düzelttim. Yine de, ss
benden daha aşinaysanız yardımcı olabileceğinden şüpheleniyorum :
sudo sh -c 'ss -oep | grep "$(printf "pid=%s\n" $(fuser /dev/ptmx))"'
Bu yüzden, biraz daha açık testlerle ayarlamıştım, aslında:
sudo sh <<\CMD
chkio() {
read io io <$1
dd bs=1 count=$$ </dev/zero >$2 2>/dev/null
return $((($(read io io <$1; echo $io)-io)!=$$))
}
for pts in /dev/pts/[0-9]* ; do
for ptm in $(fuser /dev/ptmx 2>/dev/null)
do chkio /proc/$ptm/io $pts && break
done && set -- "$@" "$ptm owns $pts"
done
printf %s\\n "$@"
CMD
Bu yazdırır $$
num \0
her pty ve çekler bir önceki çek karşı her ana sürecin io kadar boş bayt. Eğer fark ise $$
, pid'i pty ile ilişkilendirir. Bu daha çok işe yarıyor. Yani, benim için geri döner:
410 owns /dev/pts/0
410 owns /dev/pts/1
710 owns /dev/pts/2
Hangisi doğru, ama açıkçası, biraz açık saçık. Yani, diğerlerinden biri o zamanlar bir sürü veriyi okuyor olsaydı, muhtemelen özleyecekti. stty
Önce durdurma ucunu ya da onun gibi bir şeyi göndermek için başka bir çukurdaki modları nasıl değiştireceğimi bulmaya çalışıyorum , böylece düzeltebilirim.
sudo find /proc/*/fd/0 -ls | grep '/dev/pts/4'
, PID'lerin (/proc/PID
) listesini çıktı olarak verirdi .