Доберитесь PID любой команды в фоне передал последовательность по каналу команд

Смотрит на меня, Вы уже имеете mysql демон, работающий. Я не проверил ссылки выше, но если Вы сделали запись в /etc/rc.local или имейте /etc/rc.d/rc.mysqld необходимо знать, что эти записи используются для запуска mysql сервера во время процесса начальной загрузки.

Выполненный nmap против Вашего хоста после начальной загрузки, чтобы видеть, работает ли услуга.

11
18.09.2014, 23:48
4 ответа

Я думаю, что вы могли бы сделать что-то, как предложено здесь .

(ls -l | echo "Hello" | df -h & echo $! >&3 ) 3>pid

Здесь в приведенном выше примере я получил PID третьего трубопровода и отметил его до файла PID. Я мог бы отметить это для любого трубопровода.

4
27.01.2020, 19:58

А not-very-portable, определенное для Linux решение могло состоять в том, чтобы отследить процессы с помощью каналов, которые соединяют их. Мы можем получить PIDs первого ( задания-p ) и в последний раз ( $! ), управляет в конвейере. Используя любой PID, этот сценарий мог сделать задание:

#! /bin/bash

PROC=$1
echo $PROC

if [[ $(readlink /proc/$PROC/fd/1) =~ ^pipe: ]]
then
    # Assuming first process in chain...
    NEXT_FD=1
elif [[ $(readlink /proc/$PROC/fd/0) =~ ^pipe: ]]
then
    # Last process in chain...
    NEXT_FD=0
else
    # Doesn't look like a pipe.
    exit
fi

NEXT_PROC_PIPE=$(readlink /proc/$PROC/fd/$NEXT_FD)

while [[ $NEXT_PROC_PIPE =~ ^pipe: ]] 
do
    PROC=$(find /proc/*/fd -type l -printf "%p/%l\n" 2>/dev/null | awk -F'/' '($6 == "'"$NEXT_PROC_PIPE"'") && ($3 != "'$PROC'" ) {print $3}')
    NEXT_PROC_PIPE=$(readlink /proc/$PROC/fd/$NEXT_FD)
    echo $PROC
done
2
27.01.2020, 19:58

для оригинальной версии вопроса, когда только последний Была желанная команда PID, специальная переменная $! идеально.

foo | bar | baz &
baz_pid=$!

Нет аналогичного легкого доступа к PID других процессов.

Это потребовалось много времени для $ Pibestatus (ZSH) и $ Piberestatus (Bash), наконец, давая нам доступ ко всем статусам выхода в трубопроводе, В дополнение к $? за последний, который был рядом с оригинальной оболочкой Bourne. Может быть, что-то аналогично произойдет с $! в конце концов.

6
27.01.2020, 19:58

В этом коде я использую массивы на основе нуля -. Просто будьте осторожны с тем, что вы используете eval.

#!/bin/bash

cmd=('sleep 10' 'sleep 2' 'sleep 5')
first=1
for c in "${cmd[@]}"; do
  ((first)) && { pipe=$c; first=0; } || pipe+='|'$c
done
shopt -u lastpipe
eval $pipe &

printf 'Pipe:\n%s\n\n' "$pipe"

shellpid=$BASHPID
parent=$(ps -o pid= --ppid $shellpid | head -n -1)
declare -a pids=()
mapfile -t pids < <(printf '%s\n' $(ps -o pid= --ppid $parent))
printf '%s\n' 'Listing the arrays:'
printf '%2s %6s %s\n' i PID command
for i in "${!cmd[@]}"; do
    printf '%2d %6d %s\n' "$i" "${pids[i]}" "${cmd[i]}"
done

printf '\n%s\n' 'ps listing:'
ps xao pid,ppid,command | head -n 1
ps xao pid,ppid,command | tail | head -n -3
0
29.03.2020, 12:46

Теги

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