Команда Linux для отображения остановленных и запущенных процессов?

В настоящее время я выполняю следующую команду Linux в одной из моих программ на языке C для отображения запущенных процессов. Могу ли я в любом случае изменить его, чтобы показать остановленные и запущенные процессы?

char *const parmList[] = {"ps","-o","pid,ppid,time","-g","-r",groupProcessID,NULL};
execvp("/bin/ps", parmList);

person Vimzy    schedule 30.09.2015    source источник


Ответы (2)


jobs -s список процессов, возглавивших SIGTSTP,нет SIGSTOP. Основное отличие в том, что SIGSTOP нельзя игнорировать.

Вы можете SIGTSTP создать процесс с помощью ^Z или из другой оболочки с помощью kill -TSTP PROC_PID, а затем перечислить с помощью jobs.

Но как насчет списка PID, получивших SIGSTOP? Один из способов получить это:

 ps -e -o stat,command,pid | grep '^S '

Я нашел эти два очень полезными для остановки/продолжения некоторого процесса (обычно браузера):

kill -STOP $(pgrep procName)
kill -CONT $(pgrep procName)

Или с killall

killall -STOP procName
killall -CONT procName
person Pablo Bianchi    schedule 14.05.2018

ps -e перечисляет все процессы.

jobs список всех процессов, которые в настоящее время остановлены или находятся в фоновом режиме.

Итак, вы можете запустить команду jobs, используя execvp:

char *arg = {"jobs", NULL};
execvp(arg[0], arg);
person vish4071    schedule 30.09.2015
comment
Я должен использовать ps, и мне нужно убедиться, что отображаются как запущенные, так и остановленные процессы. - person Vimzy; 30.09.2015
comment
Управление заданиями и их команды специфичны для оболочки, общей команды jobs нет, это встроенная команда оболочки. - person Some programmer dude; 30.09.2015
comment
@Vimzy, если вам нужно только, чтобы отображались как запущенные, так и остановленные процессы (и вам не нужно различать), вы можете использовать ps -e. - person vish4071; 30.09.2015
comment
@JoachimPileborg, означает ли это, что jobs нельзя использовать с execvp. Я не пробовал запускать этот фрагмент (потому что был уверен, что он сработает, так используется execvp) - person vish4071; 30.09.2015
comment
-e не может работать, потому что он обрабатывает процессы, которые не являются частью идентификатора группового процесса. - person Vimzy; 30.09.2015
comment
Правильно, такой команды в файловой системе нигде не будет. Вместо этого оболочка ловит его и обрабатывает. - person Some programmer dude; 30.09.2015
comment
@JoachimPileborg, спасибо за понимание. @vimzy, я не очень понимаю, что вы подразумеваете под it processes that aren't a part of the group process ID, потому что на справочной странице написано, что выбираются все процессы. Я действительно не знаю, но, может быть, можно использовать ps -A или ps aux. - person vish4071; 30.09.2015