Zasadniczo muszę być w stanie przeskanować drzewo procesów i znaleźć procesy, które pasują do określonej nazwy, i zacząłem uruchamiać ponad tydzień z rzędu. Kiedy je mam, muszę je zabić. Wszystkie procesy są nadal postrzegane przez system jako uruchomione, po prostu nie wykorzystując czasu systemowego. Zwykle też będą siedzieć wiecznie w tym stanie.
Idealnie chciałbym znaleźć coś podobnego do znalezienia, ale dla procesów.
System jest Linuksem Debiana, który będzie skryptowany i uruchamiany przez crona, więc nie mam prawdziwych problemów z czymś dużym, ale zrozumiałym.
Odpowiedzi:
Możesz to zrobić za pomocą kombinacji ps, awk i kill:
Daje wynik z trzema kolumnami, z PID procesu, czasem, który upłynął od rozpoczęcia procesu, oraz nazwą polecenia bez argumentów. Upływający czas wygląda następująco:
Ponieważ chcesz, aby procesy działały dłużej niż tydzień, poszukaj linii pasujących do tego trzeciego wzorca. Możesz użyć awk do odfiltrowania procesów według czasu działania i nazwy polecenia, jak poniżej:
które wypisuje pid dla wszystkich poleceń pasujących do „mycommand”, które działały przez ponad 7 dni. Włącz tę listę w tryb „zabij” i gotowe:
źródło
etimes
jest bardziej przydatny - serverfault.com/a/393476/67675killall --quiet --older-than 1w process_name
źródło
Wszystkie potrzebne informacje można pobrać
ps -ef
. Zobacz kolumnę „STIME”. Połącz to z,grep
aby uporządkować potrzebne procesy. W tym momencie możesz użyć,cut
aby pobrać pid wszystkich pasujących procesów i przekazać je dokill
.Daj mi znać, jeśli chcesz uzyskać więcej informacji na ten temat.
źródło
jeśli jesteś rootem, aby pozbyć się śmieci (/ proc / fs proc / stat ...)
źródło
Kiedy proces się uruchamia, tworzy katalog w systemie plików / proc. Możesz użyć polecenia find, aby uzyskać katalogi starsze niż 7 dni i zabić procesy w następujący sposób:
źródło
find: warning: you have specified the -maxdepth option after a non-option argument -user, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Przeniesienie -maxdepth, aby było pierwszym wyjściem, nie zwraca żadnych procesów, i jestem pewien, że wielu powinno pasować.Nikt nie wspominał tutaj o ps-watcherze . Myślę, że możesz porównać $ start_time za pomocą funkcji elapsed2sec, ale nie jestem do końca pewien. Oto moja pierwsza myśl:
nie mam pojęcia, czy to działa, ale powinien być dobrym punktem wyjścia.
źródło