Получить PID сценария хоста в bash

Файлы, которые вы создаете в $ ZSH_CUSTOM , должны иметь расширение .zsh , согласно ] документация :

внутренности oh-my-zsh определены в его каталоге lib. Чтобы изменить их, просто создайте файл внутри пользовательского каталога (его имя не имеет значения, если у него есть окончание .zsh)

Если вы только что скопировали .bashrc и . bash_aliases , поэтому oh-my-zsh их игнорирует.

2
08.06.2017, 17:29
3 ответа

Если вы хотите увидеть PID application.sh во время его работы, я бы предложил явно перевести его в фоновый режим, захватить PID, а затем дождаться для выхода:

# ...
./application.sh  -mb 14550 input.mol output.out &
app_pid=$!
echo "The application pid is: $app_pid"
wait "$app_pid"
# ...
5
27.01.2020, 21:49

Я полагаю, вам может понадобиться комбинация чего-то вроде pstree -p и ps axjf с дополнительным разбором.

Обратите внимание, что PID httpd равен 30469, и каждый процесс, являющийся дочерним по отношению к httpd, имеет PPID (родительский идентификатор процесса) из 30469. Внуки httpd будут иметь PPID своего родительского процесса, который будет иметь PPID процесса httpd.

Я не публиковал полный вывод ни того, ни другого, так как они довольно большие. Вот пример вывода каждого из них:

user@host$ ps -axjf
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
1     30469 30469 30469 ?           -1 Ss       0   0:46 /usr/sbin/httpd
30469 22410 22410 22410 ?           -1 Ssl      0   0:00  \_ PassengerWatchdog
22410 22413 22413 22410 ?           -1 Sl       0  23:06  |   \_ PassengerHelperAgent
22410 22418 22418 22410 ?           -1 Sl      99   0:01  |   \_ PassengerLoggingAgent
30469 22442 30469 30469 ?           -1 Sl      48   7:55  \_ (wsgi:pulp)
30469 22443 30469 30469 ?           -1 S       48   1:48  \_ /usr/sbin/httpd
30469 22445 30469 30469 ?           -1 S       48   1:55  \_ /usr/sbin/httpd
30469 22447 30469 30469 ?           -1 S       48   1:54  \_ /usr/sbin/httpd

user@host$ pstree -p
 ├─httpd(30469)─┬─PassengerWatchd(22410)─┬─PassengerHelper(22413)─┬─{PassengerHelpe}(22415)
        │              │                        │                        ├─{PassengerHelpe}(22416)
        │              │                        │                        ├─{PassengerHelpe}(22417)
        │              │                        │                        ├─{PassengerHelpe}(22420)
        │              │                        │                        ├─{PassengerHelpe}(22422)
        │              │                        │                        ├─{PassengerHelpe}(22423)
        │              │                        │                        ├─{PassengerHelpe}(29342)

Обратите внимание, если вы знаете дерево родительских процессов, вы можете запустить pstree -p .

5
27.01.2020, 21:49

Чтобы сохранить идентификатор процесса утилиты, запустите его как асинхронный процесс и сохраните его PID в переменной или используйте $! напрямую (это PID последнего запущенного фонового процесса):

#!/bin/bash

export DALTON_TMPDIR=/mnt/raid0/scratch
export OMP_NUM_THREADS=6
source /opt/intel/compilers_and_libraries_2017.0.098/linux/bin/compilervars.sh intel64
source /opt/intel/mkl/bin/mklvars.sh intel64

printf 'Started at "%s"\n' "$(date)"

SECONDS=0
./application.sh -mb 14550 input.mol output.out &

app_pid="$!"

printf 'Application PID is %d\n' "$app_pid"

wait "$app_pid"

printf 'Ended at "%s"\n' "$(date)"
printf 'Run time was approximately %d minutes (%d seconds)\n' "$(( SECONDS/60 ))" "$SECONDS"

PID приложения — $app_pid.


Вы говорите, что заметили, что PID новых процессов всегда больше, чем у предыдущих процессов. Это не то, на что вы можете положиться, по двум причинам:

  1. Когда максимально допустимый PID будет выделен процессу, произойдет циклическое выделение PID, и старые PID начнут использоваться повторно. Следующий PID будет меньше, а не больше, чем предыдущий PID, когда произойдет перенос (и новые PID после этого будут пропускать числа, которые все еще используются в качестве PID запущенными процессами).
  2. Некоторые системы, такие как OpenBSD, используют случайное распределение PID:

     $ для i в {1..5}; сделать bash -c 'эхо $$'; Выполнено
    49915
    2152
    61168
    87739
    95187
     

В качестве примечания: вы можете использовать $PWD вместо $(pwd), чтобы получить текущий рабочий каталог.

1
27.01.2020, 21:49

Теги

Похожие вопросы