Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: XaugyTuH в Apr 21, 2005, 14:39



Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 21, 2005, 14:39
Идеята ми е да напиша скрипт, който убива всички процеси, които са стартирани след първоначалното зареждане на системата. Ясно, че ще е някаква врътка със ps, обаче нещо не мога да я измисля. Някой ако може - да помага. Благодаря предварително.


Титла: Затваряне на всички прозорци
Публикувано от: Drakula в Apr 21, 2005, 16:12
Само една идейка, която ми хрумна веднага след първи прочит:
Всеки следващ стартиран процес би трябвало да е с pid по-голям от всеки предходно стартиран процес.
Ако това е така (в което не съм съвсем сигурен) мисля че проблемът не е толкова труден


Титла: Затваряне на всички прозорци
Публикувано от: romeo_ninov в Apr 21, 2005, 16:22
Цитат (Drakula @ Април 21 2005,17:12)
Само една идейка, която ми хрумна веднага след първи прочит:
Всеки следващ стартиран процес би трябвало да е с pid по-голям от всеки предходно стартиран процес.
Ако това е така (в което не съм съвсем сигурен) мисля че проблемът не е толкова труден

А като стигне 65535 (или беше 32767) какво става? Номерата на процесите се рециклират, така че идеята може да се приложи, но можеш и да си омажеш нещата :-)


Титла: Затваряне на всички прозорци
Публикувано от: spawnman в Apr 21, 2005, 16:38
Болшинството от системните процеси (ако не и всички), би трябвало да са стартирани от супер потребителя, така че можеш да помислиш върху изхода на ps aux | grep root и да прецениш до колко те устройва или не :)


Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 21, 2005, 18:36
ps aux | grep root предценявам, че не ме устройва, защото е ясно, че трябва да се убият процесите пуснати само от обикновеният потребител, който се е логнал в момента. Но... не всички. Като например КДЕ. Все пак целта е да се затворят прозорците, които са отворени след първоначалното зареждане на графичната среда.
Идеята с килването на процеси по-големи от определен номер също мисля, че ще се издъни, защото до колкото знам някои от системните процеси сами се рестартират понякога и макара да изглежда, че работят непрекъснато, на практика си сменят pid-овете.
Все пак идеите до тук бяха много полезни, за да видим как няма да стане  :) . Надявам се на още такива.


Титла: Затваряне на всички прозорци
Публикувано от: в Apr 21, 2005, 18:51
гледаш uptime-а, заедно с дата/часа от ps output-а. това трябва да ти даде идея кое е пуснато по-късно


Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 21, 2005, 19:36
Как да го видя тоз таймаут? Виж какво ми дава
user@athome:~$ ps -eopid,user,fname,tmout
  PID USER     COMMAND  TMOUT
    1 root     init         -
    2 root     keventd      -
    3 root     ksoftirq     -
    4 root     kswapd       -
    5 root     bdflush      -
    6 root     kupdated     -
   47 root     kjournal     -
  131 root     khubd        -
  581 root     automoun     -
  706 root     cupsd        -
 1227 109      dbus-dae     -
 1240 root     mysqld_s     -
 1276 mysql    mysqld       -
 1277 root     logger       -
 1278 mysql    mysqld       -
 1279 mysql    mysqld       -
 1280 mysql    mysqld       -
 1307 root     sshd         -
 1318 root     kdm          -
 1326 root     X            -
 1327 nobody   proftpd      -
 1330 root     cron         -
 1334 root     kdm          -
 1340 root     apache       -
 1341 root     getty        -
 1342 root     getty        -
 1343 root     getty        -
 1344 root     getty        -
 1345 root     getty        -
 1346 root     getty        -
 1366 user     startkde     -
 1403 user     ssh-agen     -
 1446 user     kdeinit      -
 1449 user     kdeinit      -
 1451 user     kdeinit      -
 1454 user     kdeinit      -
 1460 user     kdeinit      -
 1464 user     artsd        -
 1466 user     kdeinit      -
 1467 user     kwrapper     -
 1469 user     kdeinit      -
 1470 user     kdeinit      -
 1475 user     kdeinit      -
 1477 user     kdeinit      -
 1480 user     kdeinit      -
 1672 user     kdeinit      -
 1688 user     kdeinit      -
 1751 user     firefox-     -
 1761 user     firefox-     -
 1762 user     firefox-     -
 1764 user     gconfd-2     -
 1766 user     firefox-     -
 1814 user     kdeinit      -
 1815 user     bash         -
 8000 user     sim          -
26298 root     bash         -
31990 user     kdeinit      -
 5509 user     kdeinit      -
 7470 root     man          -
 7475 root     sh           -
 7477 root     tbl          -
 7478 root     nroff        -
 7480 root     pager        -
 7483 root     groff        -
 7484 root     troff        -
 7485 root     grotty       -
 7486 user     bash         -
 8776 www-data apache       -
 9354 www-data apache       -
 9479 www-data apache       -
 9619 www-data apache       -
 9878 user     bash         -
10032 www-data apache       -
10101 www-data apache       -
10369 www-data apache       -
10525 user     ssh          -
10704 user     bash         -
10748 user     bash         -
10776 user     ps           -
Да поясня понеже са разместени тука. В стълба TMOUT има само тиренца. Нещо синтаксиса сигурно бъркам.


Титла: Затваряне на всички прозорци
Публикувано от: ivanatora в Apr 21, 2005, 21:30
Датата можеш да я вземеш от ps -Af в колоната STIME.


Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 22, 2005, 01:37
Опа, ама и аз нещо не съм в час.  ;)  Човека ми говори за uptime, пък аз си дрънкам за timeout. ???  Значи идеята е чудесна, само че не знам как да взема датата и часа. В смисъл, че ps -Af ми дава само датата ако процесът е стартирал в предишен ден и само часът ако е стартирал в текущият ден. Сори, обаче от всичкото ми четене на ман страници и ровене в гугъл не можах да го открия това. Надявам се на още малко помощ.  :)


Титла: Затваряне на всички прозорци
Публикувано от: kostadinz в Apr 22, 2005, 08:41
с пренасочване ps ... > file
по време на boot запомняш (снимаш) положението на работещите процеси.
после когато трепеш процеси избягваш тези които си запомнил във файла.
Само като идея не знам дали ще ти помогне.


Титла: Затваряне на всички прозорци
Публикувано от: rpetrov в Apr 22, 2005, 11:53
Спри процеса, за които командата е X.
Май трябва да се спре и звуков сървер (ако има стартиран).


Титла: Затваряне на всички прозорци
Публикувано от: ivak в Apr 22, 2005, 12:53
По-добре вместо 'ps' да ползваш информацията направо 'от източника' - /proc файловата система. За всеки стартиран процес там има отделна поддиректория с неговия номер, а вътре в нея има едно текстово файлче, наречено 'stat', от което ps черпи информация. n-тото поле в това файлче показва времето на стартиране на процеса в unix формат (бр. секунди от 1970 год. насам). Оттук насетне можеш да ползваш или идеята на kostadinz и да 'снимаш' процесите, след като е завършило зареждането на графичната среда, или пък да си харесаш някой реперен процес, за който се предполага, че е последният зареден (знам ли кой там, може би window manager-a... не ползвам kde) и да 'убиеш' всички процеси, които са по-млади от него.


Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 24, 2005, 03:40
ivak, благодаря много, това е безценна информация. Започвам да работя по варианта с процеса, който се е стартирал последен при зареждането на системата. Само се чудя дали е възможна следната издънка: Системен  процес да се рестартира и времето му на стартиране да се промени и да е  по-късно от зададения процес и в последствие да го килна и да омажа всичко. Някакви идеи?


Титла: Затваряне на всички прозорци
Публикувано от: XaugyTuH в Apr 25, 2005, 00:50
Ако някой се чуди, да обясня все пак с каква цел ми трябва този скрипт.
Написах програмка, която служи за управление на компютрите в компютърна зала, която си има всички основни функционалности, но не затваря прозорците, които е отворил клиента при спиране на времето му. Съответно на следващият клиент при стартиране на неговото време му се появяват прозорците отворени от предишния клиент и не си е направил труда да затвори.


Титла: Затваряне на всички прозорци
Публикувано от: ohubohu в Apr 25, 2005, 09:20
Извинявай за тъпия въпрос, но защо не убиваш работещия юзер и да го логваш пак, вместо цялата тази гимнастика с процесите му?

На мен ми изглежда по-лесно и по-просто - като "ЦЕЛУВКА" :)


Титла: Затваряне на всички прозорци
Публикувано от: CTEHATA в Apr 25, 2005, 11:11
Цитат (ivak @ Април 22 2005,13:53)
По-добре вместо 'ps' да ползваш информацията направо 'от източника' - /proc файловата система. За всеки стартиран процес там има отделна поддиректория с неговия номер, а вътре в нея има едно текстово файлче, наречено 'stat', от което ps черпи информация. ...

най-чистото решение би било да използваш информацията за родителски процеси, така че да убиеш само тези, които са стартирани от мениджъра на прозорци.  Само трябва да се погрижиш тези процеси, които са необходими за работата на мениджъра ти, да ги изключиш от списъка за убийства.
   Естественно решението с рестартирането на Х е даже по-чисто, но ако едно хлапе чака да играе веднага след предното ще е досадно да трябва да мине рестарта.

За да видиш дървото на процесите и да се ориентираш, използай pstree