Стоп "дд" через некоторое время l oop через несколько секунд - PullRequest
0 голосов
/ 08 марта 2020

Я не могу понять, как это сделать, что мне нужно после "c" секунд, дд останавливается. Но он продолжает работать и игнорирует как циклы while, так и секунды. Скрипт

read c
end=$((SECONDS+$c))

while [ $SECONDS -lt $end ]; do
    echo "Moving..."
    dd if=/dev/zero of=/dev/null 

done

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

Добавление моего комментария в качестве ответа для полноты:

Чтобы остановить процесс через определенный промежуток времени, вы можете запустить его, используя timeout, если ваша система предоставляет его; это часть GNU coreutils (но, очевидно, не указывается в POSIX).

В вашем случае вместо l oop вы можете запустить

timeout "$c" dd if=/dev/zero of/dev/null
2 голосов
/ 08 марта 2020

Это не так, как работают циклы. Ваша конструкция будет работать до тех пор, пока dd не завершится. Если вы хотите прекратить его через c секунд, вы должны либо вызвать его с помощью timeout (почти наверняка предпочтительное решение), либо явно отправить сигнал. например, что-то вроде:

dd if=/dev/zero of=/dev/null &
sleep $c
kill $!

Использование & в качестве ограничителя команды приводит к асинхронному запуску dd (он же "в фоновом режиме"), поэтому управление немедленно возвращается в оболочку, сохраняя pid команды dd в переменной $!. Затем оболочка немного спит и посылает сигнал на прекращение dd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...