Поиск запущенного сценария PID с именем скрипта

Это может помочь:

$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git  
0
22.10.2018, 17:38
2 ответа

Если вы хотите, чтобы скрипт отображался вместе со своим именем в списке процессов, вам следует добавить соответствующую строку -bang(#! /bin/shили #! /bin/bash).

Пример:

$ cat foo
sleep 10

$./foo &
[4] 4403
$ ps -q 4403
  PID TTY          TIME CMD
 4403 pts/3    00:00:00 bash

$ cat bar
#! /bin/sh
sleep 10

$./bar &
[5] 4406
$ ps -q 4406
  PID TTY          TIME CMD
 4406 pts/3    00:00:00 bar

В противном случае в Linux вы все равно можете найти имя скрипта в каталоге /proc/PID/fd:

$./foo &
[2] 5125
$ ls -l /proc/5125/fd
total 0
lrwx------ 1 ahq ahq 64 Oct 22 17:57 0 -> /dev/pts/3
lrwx------ 1 ahq ahq 64 Oct 22 17:57 1 -> /dev/pts/3
lrwx------ 1 ahq ahq 64 Oct 22 17:57 2 -> /dev/pts/3
lr-x------ 1 ahq ahq 64 Oct 22 17:57 254 -> /tmp/foo
lrwx------ 1 ahq ahq 64 Oct 22 17:57 255 -> /dev/pts/3

Обратите внимание на четвертую строку, 254fd, которая указывает путь к выполняемому сценарию. С оболочками, отличными от bash, это будет другой fd, например 3или 10.

Это также можно выполнить в обратном порядке с помощью lsof /tmp/foo.

4
28.01.2020, 02:16

В Linux вы можете:

grep -l hello.sh /proc/*/task/*/comm 2>/dev/null

... который будет сообщать о любом из ваших процессов с «hello.sh» в своей команде -строка (pid 26560, когда я запускал его):

/proc/26560/task/26560/comm

Перенаправление stderr заключается в том, чтобы удалить жалобу grep на файл связи вашего текущего процесса (/proc/self/task/$$/comm )исчезновение между моментом, когда оболочка расширяет путь с подстановочными знаками, и когда grep решает открыть его для чтения/сбора.

Если вы запустите второй "hello.sh", вы получите два результата и т. д.:

$./hello.sh &
[2] 28328
$ grep -l hello.sh /proc/*/task/*/comm 2>/dev/null
/proc/26560/task/26560/comm
/proc/28328/task/28328/comm
1
28.01.2020, 02:16

Теги

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