10-07-2010, 22:17
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
איפה שאתה רואה סימן שאלה, פשוט אין terminal שמקושר לתהליך...
וזה לא נכון שרק bash, גם כל מי שהרצת מתחתיו...
דוגמאות:
קוד:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 18207 0.0 0.0 5924 728 tty1 Ss+ 20:52 0:00 /sbin/agetty 38400 tty1 linux
root 18208 0.0 0.0 5924 732 tty2 Ss+ 20:52 0:00 /sbin/agetty 38400 tty2 linux
root 18209 0.0 0.0 5924 728 tty3 Ss+ 20:52 0:00 /sbin/agetty 38400 tty3 linux
root 18210 0.0 0.0 5924 728 tty4 Ss+ 20:52 0:00 /sbin/agetty 38400 tty4 linux
root 18211 0.0 0.0 5924 728 tty5 Ss+ 20:52 0:00 /sbin/agetty 38400 tty5 linux
root 18212 0.0 0.0 5924 728 tty6 Ss+ 20:52 0:00 /sbin/agetty 38400 tty6 linux
root 17604 1.8 2.8 314080 233804 tty7 Ss+ 20:52 2:41 \_ /usr/bin/X -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-AszCXg
shimi 19263 0.0 0.0 18024 1948 pts/3 Ss 22:18 0:00 \_ /bin/bash
shimi 19373 0.0 0.0 14876 1104 pts/3 R+ 23:15 0:00 \_ ps axfu
לגבי איך לדעת מה שייך לפרוסס... אם הפרוסס רץ ביוזר שלך (או שאתה root ואז יש לך הרשאה להכל), אפשר להעזר ב proc/PID/fd/ כדי לראות שם את ה symlink-ים לכל ה file descriptors הפתוחים, ביניהם ה tty / pts/X...
עבור יוזרים אחרים - שאלה טובה. חקרתי את הנושא קצת. נראה שהשדה ה 7 ב proc/PID/stat/ (אשר נגיש לכל משתמש, ולא רק לבעלי הפרוסס), אמור להכיל כביכול את הטרמינל. בדקתי גם בקוד המקור של הקרנל (usr/src/linux/fs/proc/array.c/), ונראה שזה מה שזה אמור להיות (השדה נקרא tty_nr). אממה, שבבדיקה שעשיתי, נראה שזה סתם מספר לא קשור. חשבתי שאולי זה FD של הטרמינל, אז כתבתי תוכנה קטנה ב C שמשתמשת בקריאת ה system העונה לשם ttyname, שאמורה לקבל FD ולהחזיר מצביע למחרוזת המכילה את שם ה terminal. כשהרצתי את התוכנה, אפילו על מספר שקיבלתי מ stat ששייך ליוזר שלי, קיבלתי בחזרה NULL. לא טרחתי לבדוק את ה errno כי זה כנראה ממילא היה ניחוש שגוי (שהמספר הוא בכלל FD...). מה הוא כן? שאלה טובה... אם יהיה לי כוח לחפור בקרנל...
לחלופין, אתה פשוט יכול לנסות לקרוא את קוד המקור של ps! כי זה בהחלט אפשרי, ולא חייבים להיות root בשביל לקבל את המידע (בדקתי ו suid bit לא מוגדר על ps...)
|