2015-05-11 3 views
0

Как распечатать процессы, которые выполнялись более 30 минут?Как я могу фильтровать соответствующие процессы на основе времени выполнения?

Я могу перечислить все процессы, например, так:

ps ax pid,etime,ocmd 

Но как я могу фильтровать только сценарии, соответствующие /var/www/vhosts/path/to/my_script.phpи были выполнение более 30 минут?

ответ

0
ps -eao etime,pid,command | awk -F":" '$2>30' | grep my_script.php 

EDIT

Musth также проверить часы !! извините

ps -eao etime,pid,command | awk -F":" '$1>=0 || $2>30' | grep my_script.php 
+0

Я не могу заставить это работать. Я подозреваю, что это потому, что 'etime' менее 1 часа представлены как '00: 00', а не' 00: 00: 00'. Таким образом, новый скрипт, который работает в течение 1 минуты, может показывать 'etime'' 01: 00', или другой может работать в течение 45 секунд: '00: 45'. Оба они соответствуют вашему 'awk -F": "'$ 1> = 0 || $ 2> 30''. – Ryan

+0

Я также пытался использовать 'NF', но' awk' терпит неудачу, если час не существует: 'awk -F": "'$ (NF-2)> = 0 || $ (NF-1)> 30''. Что вы порекомендуете? – Ryan

+0

Я думаю, вы должны использовать split, например, и ссылаться на количество разделенных частей: 'ps -eao etime, pid, command | awk '{split ($ 1, arra, ":"); if (length (arra)> 2 && (arra [1]> 0 || arra [2]> 30)) {print $ 0} else if (arra [1]> 30) {print $ 0}} '' –

Смежные вопросы