Bash                
            Работа и процессы
        
        
            
    Поиск…
Список текущих заданий
$ tail -f /var/log/syslog > log.txt
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
$ sleep 10 &
$ jobs
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
[2]-  Running                 sleep 10 &
Обработка работы
Создание рабочих мест
 Чтобы создать задание, просто добавьте один & после команды: 
$ sleep 10 &
[1] 20024
Вы также можете сделать выполняемый процесс заданием, нажав Ctrl + z :
$ sleep 10
^Z
[1]+  Stopped                 sleep 10
Фоновый и передний план процесса
 Чтобы перенести процесс на передний план, команда fg используется вместе с % 
$ sleep 10 &
[1] 20024
$ fg %1
sleep 10
 Теперь вы можете взаимодействовать с процессом. Чтобы вернуть его на задний план, вы можете использовать команду bg . Из-за занятой сессии терминала вам нужно сначала остановить процесс, нажав Ctrl + z . 
$ sleep 10
^Z
[1]+  Stopped              sleep 10
$ bg %1
[1]+ sleep 10 &
 Из-за лени некоторых программистов все эти команды также работают с одним % если есть только один процесс или первый процесс в списке. Например: 
$ sleep 10 &
[1] 20024
$ fg %        # to bring a process to foreground 'fg %' is also working.
sleep 10
или просто
$ %           # laziness knows no boundaries, '%' is also working.
sleep 10
 Кроме того, просто набрав fg или bg без какого-либо аргумента, обработает последнее задание: 
$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20
Убийство рабочих мест
$ sleep 10 &
[1] 20024
$ kill %1
[1]+  Terminated              sleep 10
 Процесс сна выполняется в фоновом режиме с идентификатором процесса (pid) 20024 и номером задания 1 . Чтобы ссылаться на этот процесс, вы можете использовать либо pid, либо номер задания. Если вы используете номер задания, вы должны указать его % . Сигнал уничтожения по умолчанию, отправленный kill - это SIGTERM , который позволяет целевому процессу выйти изящно. 
 Ниже приведены некоторые общие сигналы об уничтожении. Чтобы просмотреть полный список, запустите kill -l . 
| Название сигнала | Значение сигнала | эффект | 
|---|---|---|
| SIGHUP | 1 | Вешать трубку | 
| SIGINT | 2 | Прерывание с клавиатуры | 
| SIGKILL | 9 | Убить сигнал | 
| SIGTERM | 15 | Сигнал о завершении | 
Запуск и уничтожение определенных процессов
 Вероятно, самый простой способ убить pkill процесс - это выбрать его через имя процесса, как в следующем примере, используя команду pkill как 
pkill -f test.py
 (или) более безопасный способ, используя pgrep для поиска фактического идентификатора процесса 
kill $(pgrep -f 'python test.py')
 Тот же результат можно получить, используя grep над ps -ef | grep name_of_process затем ps -ef | grep name_of_process процесс, связанный с результатом pid (id процесса). Выбор процесса с использованием его имени удобен в тестовой среде, но может быть действительно опасным, когда сценарий используется в производстве: практически невозможно быть уверенным, что имя будет соответствовать процессу, который вы на самом деле хотите убить. В этих случаях на самом деле такой подход безопасен. 
 Запустите скрипт, который в конечном итоге будет убит с помощью следующего подхода. Предположим, что команда, которую вы хотите выполнить и в конечном итоге убить, это python test.py 
#!/bin/bash
if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi
 Это создаст файл в каталоге /tmp содержащий pid процесса python test.py Если файл уже существует, мы предполагаем, что команда уже запущена, и скрипт возвращает ошибку. 
Затем, когда вы хотите его убить, используйте следующий скрипт:
#!/bin/bash
if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi
который будет точно уничтожать процесс, связанный с вашей командой, не полагаясь на любую изменчивую информацию (например, строку, используемую для запуска команды). Даже в этом случае, если файл не существует, сценарий предполагает, что вы хотите убить неиспользуемый процесс.
Этот последний пример может быть легко улучшен для выполнения одной и той же команды несколько раз (например, для добавления файла pid вместо его перезаписи) и для управления случаями, когда процесс умирает до его уничтожения.
Список всех процессов
Существует два распространенных способа перечислить все процессы в системе. Оба перечисляют все процессы, выполняемые всеми пользователями, хотя они отличаются в том формате, который они выдают (причина различий историческая).
ps -ef   # lists all processes 
ps aux   # lists all processes in alternative format (BSD)
Это можно использовать, чтобы проверить, работает ли данное приложение. Например, чтобы проверить, запущен ли SSH-сервер (sshd):
ps -ef | grep sshd
Проверьте, какой процесс выполняется на определенном порту
Чтобы проверить, какой процесс выполняется на порту 8080
lsof -i :8080
Поиск информации о запущенном процессе
 ps aux | grep <search-term> показывает процессы, соответствующие поисковому термину 
Пример:
root@server7:~# ps aux | grep nginx
root       315  0.0  0.3 144392  1020 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data  5647  0.0  1.1 145124  3048 ?        S    Jul18   2:53 nginx: worker process
www-data  5648  0.0  0.1 144392   376 ?        S    Jul18   0:00 nginx: cache manager process
root     13134  0.0  0.3   4960   920 pts/0    S+   14:33   0:00 grep --color=auto nginx
root@server7:~#
 Здесь второй столбец - это идентификатор процесса. Например, если вы хотите убить процесс nginx, вы можете использовать команду kill 5647 . Всегда рекомендуется использовать команду kill с SIGTERM а не SIGKILL . 
Отключение фоновой работы
$ gzip extremelylargefile.txt &
$ bg
$ disown %1
Это позволяет продолжить процесс, как только ваша оболочка (терминал, ssh и т. Д.) Будет закрыта.