Solusi 1:
GNU Killall dapat mematikan proses yang lebih tua dari usia tertentu, menggunakan nama prosesnya.
if [[ "$(uname)" = "Linux" ]];then killall --older-than 1h page.py;fi
Solusi 2:
Berkat jawaban Christopher, saya dapat menyesuaikannya dengan yang berikut:
find /proc -maxdepth 1 -user apache -type d -mmin +60 -exec basename {} \; \
| xargs ps | grep page.py | awk '{ print $1 }' | sudo xargs kill
-mmin
adalah perintah find yang saya lewatkan.
Solusi 3:
find tidak selalu berfungsi, tidak setiap sistem memiliki waktu yang tersedia, dan ini mungkin status regex newb saya, tetapi menurut saya Anda tidak memerlukan yang lebih dari ini:
ps -eo pid,etimes,comm,user,tty | awk '{if ($4 ~ /builder/ && $5 ~ /pts/ && $2>600) print $1}'
- daftarkan semua proses dan berikan kolom PID,ELAPSED(etimes =second), COMMAND, USER, TT (thanks @ahoffman)
- dengan awk cetak PID di mana kolom ke-4 ($4, USER) berisi teks 'builder', dan kolom ke-5 ($5, TT) berisi teks 'pts' dan kolom ELAPSED memiliki nilai lebih besar dari 600 detik (terima kasih @ amtd)
Anda kemudian dapat menyalurkannya untuk membunuh atau apa pun kebutuhan Anda.
Solusi 4:
# get elapsed time in seconds, filter our only those who >= 3600 sec
ps axh -O etimes | awk '{if ($2 >= 3600) print $2}'
Jika mau, Anda dapat memberi makan ps
dengan daftar PID untuk dicari di dalamnya, misalnya. g.:
ps h -O etimes 1 2 3
Solusi 5:
Saya pikir Anda dapat memodifikasi beberapa jawaban sebelumnya agar sesuai dengan kebutuhan Anda. Yaitu:
for FILE in (find . -maxdepth 1 -user processuser -type d -mmin +60) do kill -9 $(basename $FILE) # I can never get basename to work with find's exec. Let me know if you know how! done
Atau
ps -eo pid,etime,comm | awk '$2!~/^..:..$/ && $3~/page\.py/ { print $1}' | kill -9
Saya pikir yang kedua mungkin paling sesuai dengan kebutuhan Anda. Versi find akan menghentikan proses lain oleh pengguna tersebut
--Christopher Karel