Portál AbcLinuxu, 12. května 2025 06:13
sleep(3)
alebo alarm(2)
sleep()
.
while( not the time ) sleep(10); ...Nejakej cas procesoru to sice zere, ale to ze se jednou za 10s provede tahle jednoducha smycka dnestni procesory nezatizi...
Pokud chceš uspávat jiný proces, lze se na něj připojit přes ptrace(2), čímž ho efektivně zastavíš, pak si ve svém procesu pospat, jak dlouho potřebuješ, a nakonec opět přes ptrace() se od něj odpojit, čímž se opět rozeběhne.
Případně, což je přenositelnější, ale nevím, nakolik je možné se tomu bránit, zaslat signál SIGSTOP a potom SIGCONT.
ako chcete vykonať obsluhu signálu, ak nechcete, aby sa proces rozbehol
Úplně stejně, jako když proces je v přerušitelném spánku a dostane signál. Obsluhu totiž volá jádro a po vykonání obsluhy se řízení vrací jádru. To teprve pak rozhodne, zda proces přesune do fronty runable nebo jej opět uloží k ledu. Ano, přísně vzato, když jede obsluha, tak také běží proces. Myslel jsem rozběhnout program procesu v místě uspání (tedy mimo obsluhu).
sleep()
doplněné o smyčku pro případ přerušení signálem připadá podstatně jednodušší a praktičtější.
sleep()
může skončit předčasně, pokud přijde neignorovaný signál. Obvykle se pro tyto účely používá makro TEMP_FAILURE_RETRY()
nebo příznak SA_RESTART
, ale tady to nejde, protože je potřeba při opakovaném volání upravit parametr.
To není uspání ale zastavení.
Proces je runable, nebo není. Technicky v tom rozdíl není.
Tazatel se ptal na to, jak uspat proces "zevnitř"
To z dotazu mně není zřejmé. Opravdu jsem jej pochopil tak, že autor chce řídit jiný proces, ne ten svůj.
Proces je runable, nebo není. Technicky v tom rozdíl není.
Technicky v tom rozdíl je. Uspání je stav S
(proces čeká na dokončení syscallu (který může být přerušen signálem), pak bude pokračovat), zastavení T
(proces je administrativně zastaven zvenčí a pokračovat bude teprve tehdy, až dostane signál CONT
).
sleep()
resp. usleep()
nebo nanosleep()
jako nejvhodnější řešení.
Už rozumím. Já jsem si vyložil slovo „uspat“ příliš široce. Samozřejmě, že tak, jak to říkáte, to je.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.