Dacă „su root” sau „su <other_user>” din contul meu de autentificare utilizator și apoi mă deconectez (sau ies), durează aproximativ 1 minut până când deconectarea se finalizează și mă readuce la shell-ul meu de utilizator.
În acel minut, procesul „su <other_user>” folosește 100% din CPU.
Mă pot deconecta puțin mai repede dacă ctrl-c de câteva ori (ceea ce probabil întrerupe tot ce rulează la ieșire/deconectare).
Acest lucru se întâmplă chiar dacă nu am .profile, .bash_profile, .bashrc, .logout etc. în directorul principal ~<other_user>.
Apare cu sau cu indicatorul „-l” (shell de conectare).
Aceeași întârziere se întâmplă chiar dacă „su” folosesc /bin/sh (de exemplu, „su <other_user> -s /bin/sh”).
Cu toate acestea, dacă schimb utilizatorul la propriul meu cont (adică „su <user_my_user>”), nu există nicio întârziere la deconectare.
De asemenea, rularea „sudo -u <other_user>” nu are întârziere.
În special, „sudo -u root bash” care îmi oferă un shell de rădăcină, iese instantaneu (în timp ce „sudo -u root su” rămâne cu un minut sau mai mult).
Aveți idee ce poate cauza o astfel de deconectare întârziată după ce ați sunat la alt utilizator shell?
Ce proces(e) sunt declanșate de deconectare/ieșire care ar provoca o astfel de ieșire întârziată?
Rețineți că rulez Ubuntu 18.04.
Rețineți că rulează o „strace”, pare să se atârne de ultima declarație „openat”:
introduceți codul de aici: Procesul 27411 atașat
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6
openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 6
openat(AT_FDCWD, "/proc/sys/kernel/hostname", O_RDONLY|O_CLOEXEC) = 6
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/fscrypt/1002.count", O_RDWR|O_CREAT|O_CLOEXEC, 0600) = 7
openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/etc/fscrypt.conf", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/proc/sys/vm/drop_caches", O_WRONLY|O_SYNC|O_CLOEXEC) = 7
+++ ieșit cu 0 +++
Notă: rularea manuală a „echo 3 >| /proc/sys/vm/drop_caches” durează, de asemenea, aproximativ un minut, în timp ce se pare că ar trebui să fie foarte rapidă.
Chiar și rularea imediată din nou durează atât de mult atunci când rulați a doua oară.
Deci, ce ar putea dura atât de mult pentru a arunca cache-urile?
Și după cum s-a menționat mai sus, încărcarea procesorului crește la ~100% când se întâmplă asta...