Portál AbcLinuxu, 9. května 2025 22:46
Dobry den, mam takovyho cyklus:
for ((i=0;i<=10000;i=i+1)); do echo $i; done
Cyklus pracuje pomerne dlouho a ja bych rad vedel, zda se program nesekl. Proto mam takovouto predstavu: V prubehu cyklu zmacknu nejakou klavesu a skript mi vypise aktualni hodnotu $i a bude dale pokracovat. Je toto nejakym zpusobem realizovatelne?
Pokud by bylo přijatelné řešení místo stisku tlačítka poslat procesu signál, šlo by to nějak takhle:
#!/bin/bash
vypis () {
echo $i;
}
trap vypis SIGUSR1
echo "PID: $$"
for ((i=0;i<=10000000;i=i+1)); do
: #nop
done
a pak procesu poslat ten signál: kill -SIGUSR1 pid_procesu. Místo SIGUSR1 by asi šlo použít některý ze signálů, který pošle procesu terminál při stisknutí Ctrl+něco, nevím ale, jak moc dobrý je to nápad. (Další info: help trap, man 7 signal)
Chtel jsem trapovat signal, ktery posle CTRL+D, ale zaboha nemuzu zjistit, jak se tento signal jmenuje. Muzete mi prosim poradit?
Ctrl+C
a chceš-li mít více možností, tak následně použij read
pro další větvení tj. např. ukončení programu, podrobnější výpis atp.
A je nejaky zpusob jak sriptu prikazat, aby mi to vypsal po stisku CTRL+D nebo je to nerealne?
read
na stisknutí Ctrl+D
a poté odešle signál, který dokáže odchytit trap
skriptu na pozadí.
A nebude lepší když tě program na zásek upozorní sám? Tj. definuješ maximální dobu, kterou může trvat jedna iterace a po jejím překročení na to budeš upozorněn.
Příklad nalezneš např. v BASH - VI: obesenec-1.1.tgz, soustřeď se na fce stopky_start, stopky_stop...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.