Pada dasarnya saya harus dapat memindai pohon proses dan menemukan proses yang cocok dengan nama tertentu dan mulai berjalan lebih dari seminggu. Setelah saya memilikinya, saya harus membunuh mereka. Semua proses masih terlihat dalam keadaan berjalan oleh sistem, hanya saja tidak menggunakan waktu sistem apa pun. Mereka biasanya akan duduk selamanya dalam kondisi ini juga.
Idealnya saya ingin menemukan sesuatu yang mirip, tetapi untuk proses.
Sistem adalah linux Debian dan ini akan dituliskan dan dijalankan oleh cron jadi saya tidak punya masalah nyata dengan sesuatu yang besar tapi bisa dimengerti.
Jawaban:
Anda dapat melakukan ini dengan kombinasi ps, awk dan kill:
Memberi Anda output tiga kolom, dengan PID proses, waktu yang berlalu sejak proses dimulai, dan nama perintah, tanpa argumen. Waktu yang berlalu terlihat seperti ini:
Karena Anda menginginkan proses yang telah berjalan selama lebih dari seminggu, Anda akan mencari garis yang cocok dengan pola ketiga itu. Anda dapat menggunakan awk untuk memfilter proses dengan menjalankan waktu dan nama perintah, seperti ini:
yang akan mencetak pid dari semua perintah yang cocok dengan 'perintah saya' yang telah berjalan selama lebih dari 7 hari. Pipa daftar itu menjadi kill, dan Anda selesai:
sumber
etimes
lebih berguna - serverfault.com/a/393476/67675killall --quiet --older-than 1w process_name
sumber
Semua info yang Anda butuhkan dapat diambil dari
ps -ef
. Lihat kolom "STIME". Kombinasikan itu dengangrep
untuk memilah proses yang Anda butuhkan. Pada titik itu, Anda dapat menggunakancut
untuk mengambil pid dari semua proses yang cocok dan meneruskannya kekill
.Harap beri tahu saya jika Anda ingin detail lebih lanjut tentang cara melakukan ini.
sumber
jika Anda root, untuk membuang sampah (/ proc / fs proc / stat ...)
sumber
Ketika sebuah proses dimulai, ia menciptakan direktori di sistem file / proc. Anda dapat menggunakan perintah find untuk mendapatkan direktori yang lebih dari 7 hari dan mematikan proses sebagai berikut:
sumber
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.
Memindahkan -maxdepth menjadi output pertama tidak menghasilkan proses, dan saya yakin banyak yang harus cocok.Tidak ada yang menyebutkan ps-watcher di sini. Saya pikir Anda mungkin dapat membandingkan $ start_time menggunakan fungsi elapsed2sec tapi saya tidak sepenuhnya yakin. Inilah pikiran pertama saya:
tidak tahu apakah itu berhasil, tetapi itu harus menjadi titik awal yang baik.
sumber