Слегка изменено для уничтожения процесса sleep
, родительский PID которого равен $spid
:
#! /bin/bash
function indent () { "$@" | sed 's/^/ /'; }
function sleeper () { sleep 1 && echo "Sleep complete."; }
function child () {
sleeper &
local spid=$!
echo "Invoked sleeper." | grep "sleep"
pkill -P "$spid" sleep
echo "Done child."
}
indent child
Я полагаю, что проблема заключается в том, что фоновое задание во время выполнения sleep
на самом деле не получает сигнал TERM
, который вы ему отправляете, пока sleep
не завершится. Приведенная выше команда pkill
будет сигнализировать процессу sleep
, а не самому фоновому заданию.
killall dhclient
ifconfig eth0 down
ifconfig eth0 1.2.3.4 netmask 255.255.255.0 up
route add default gw 1.2.3.1
echo nameserver 8.8.8.8 > /etc/resolv.conf
(Это предполагает, что ваш IP-адрес 1.2.3.4
, ваша сетевая маска 255.255.255.0
(, то есть /24
, ваш шлюз 1.2.3.1
, и вы хотите использовать DNS-сервер -Google (8.8.8.8
))
Редактировать:Я добавил несколько тестов. Также следует отметить, что в своем ответе я пропустил IPv6.
И если он по-прежнему не проходит проверку там, где он терпит неудачу, попробуйте выполнить следующие действия в указанном порядке:
ping 127.0.0.1
-> Когда это не удается, все формы сети не работают или вы испортили конфигурацию брандмауэра. ping 1.2.3.4
-> Когда это не удается, ваша карта все еще не работает или вы не предоставили ей правильный IP-адрес ping 1.2.3.1
-> Если это не удается, ваша сетевая маска неверна или существуют другие проблемы между вами и первым маршрутизатором. ping -4 google.com
-> Если это не удается, DNS настроен неправильно.