Есть ли способ вызвать закрытие одной программы, закрыв другую? Возможно, сценарий оболочки?

Похоже, что коллекция программного обеспечения PHP 7.1 не предназначена для CentOS 6, но доступна в CentOS 7.

Вы можете попытаться собрать rh-php71коллекцию программного обеспечения для CentOS 6, но я не нашел никакой информации о том, что кто-то пытался это сделать.

Вы можете найти информацию о доступных коллекциях программного обеспечения на их веб-сайте или в настроенном репозитории YUM

0
25.05.2021, 12:47
2 ответа

Простой способ, позволяющий процессам обмениваться данными, — это сигналы .

bashимеет встроенную функцию trap, которая позволяет вам добавить обработчик для данного сигнала, чтобы вы могли обернуть все свои команды внутри другого скрипта и настроить такой обработчик на уничтожение всех других программ, когда он получает данный сигнал.

Рассмотрим:

cat proc_a.sh
#!/bin/bash
echo "Load program 1 as : $$"
sleep 1d

cat proc_b.sh
#!/bin/bash
echo "Load program 2 as : $$"
sleep 1d

Теперь создайте оболочку для запуска двух других процессов.:

cat wrap.sh
#!/bin/bash
./proc_a.sh
a_pid=$!

./proc_b.sh
b_pid=$!

cleanup() {
    echo "Kill process a $a_pid"
    kill $a_pid

    echo "Kill process b $b_pid"
    kill $b_pid

    echo "Kill me : $$"
    kill $$
}

trap cleanup SIGINT

while :;do
   sleep 1d
done

если вы запускаете ./wrap.shи затем отправляетеSIGINT(Нажмите CTRL -C)Вы можете увидеть это:

Load program 1 as : 27141
Load program 2 as : 27142
^CKill a process a 27141
kill process b 27142
Kill me : 27140
Terminato

Недостатком этого является то, что В ЛЮБОЕ ВРЕМЯ вы закроете один процесс, и другой будет закрыт, за исключением того факта, что теперь вам нужно убить wrapвместо одного из процессов.

Чтобы избежать этого недостатка, вы можете запустить программу xfce из встроенного скрипта и установить обработчик сигнала прямо здесь, когда один из двух получает сигнал закрытия, ищет pid другой программы xfce -оболочки -и убить это.

1
28.07.2021, 11:29

Итак, я наконец-то решил попробовать, и, как я уверен, вы знаете, идея и исполнение сценария надежны. Но, к сожалению, это не то, что я ищу. Чего я точно хочу, так это чего-то, возможно, сценария, который вызовет закрытие вторичной конкретной программы, когда я закрою первую конкретную программу. Итак, скажем, я закончил слушать музыку в CMus. Я хотел бы иметь возможность закрыть эту программу и заставить вторичную программу также закрыться. Вроде конвейера, но для закрытия программы. Это возможно?

0
28.07.2021, 11:29

Теги

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