Jack Dorsey představil (𝕏) open source týmovou komunikační platformu Buzz (GitHub) s cílem snížit závislost na Slacku a GitHubu.
Poštovní klient Thunderbird byl vydán v nové verzi 153 s kódovým názvem Meadow. Jedná se o ESR (Extended Support Release) vydání. Přehled novinek v poznámkách k vydání. Vylepšuje OAuth. Thundermail lze používat bez instalace doplňku.
AI tento rok naplno vtrhla do vývoje softwaru a výrazně ovlivňuje také open source projekty. Jiří Eischmann v příspěvku Jak mění AI open source na svém blogu rozebírá několik trendů, které v open source v poslední době v souvislosti s AI pozoruje, a jak tyto trendy svět otevřeného softwaru mění (Inflace projektů, Zahlcení kontroly, Klesající motivace zveřejňovat kód).
Evropská komise (EK) vyměřila americké internetové společnosti Google pokutu 890 milionů eur (21,5 miliardy Kč) za porušení unijního nařízení o digitálních trzích (DMA). Firma se podle unijní exekutivy provinila tím, že ve vyhledávači Google Search upřednostňovala vlastní služby a že podnikům ukládala omezení, která jim bránila nasměrovat spotřebitele k alternativním, často levnějším nákupním kanálům na platformě Google Play.
… více »Samsung na akci Galaxy Unpacked July 2026 (YouTube) představil své nové telefony Galaxy Z Fold8 Ultra, Fold8 a Flip8, hodinky Galaxy Watch Ultra2 a Watch9 a chytré brýle ve spolupráci s Gentle Monster a Warby Parker.
Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.
Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.
RPCS3 (Wikipedie), tj. open source emulátor Sony PlayStation 3, snížil minimální požadavky. Nově jsou podporovány starší grafické karty ATI Radeon řady HD 2000, 3000 a 4000 z let 2007 až 2009. Na PC běží už 75 % všech her pro PlayStation 3. V budoucnu bude RPCS3 fungovat bez firmwaru z PS3. V RPCS3 byl implementován systémový modul cellSysmodule (𝕏).
Vyšel open-source nástroj winetop (MIT) — nativní CLI/TUI pro sledování a ukončování Wine, Proton, Lutris, Heroic a Bottles sezení. Seskupuje procesy podle WINEPREFIX / Steam AppId, umí bezpečně zabít jen hru (včetně Steam reaperu) a nabízí i skriptovatelné příkazy (list, kill, orphans, …). Balíčky jsou mimo jiné na crates.io, Copru (dnf copr enable kovariadam/winetop), PPA ppa:kovariadam/winetop a AUR (winetop-bin).
Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.
Řešení dotazu:
sudo -u $DAEMONUSER ffmpeg -loglevel quiet -i $source -vn ... \ -f mpegts - | sudo -u $DAEMONUSER ffmpeg -loglevel quiet \ -f mpegts -i - -c copy ... $dst $index \ -f mpegts -c copy -f mpegts udp://@$udp_dst & echo $! > $PIDFILE
${PIPESTATUS[@]}
což vám vrátí všechny PID procesů, které jsou spojené rourou. Ty pak pozabíjíte jedním killnutím.
Bez bashe je zjištění všech PID složitější -- vyžaduje větší znalost file deskriptorů. Přičemž bude takové řešení výrazně nepřehlednější (pokud to má být stále one-liner). Další způsob (méně spolehlivý) je: zjistit poslední PID pomocí !$ (tak jak to máte) a pomocí utilitky ps a programu awk nebo sed si vytáhnout všechny PID u stejného subprocesu.
( ffmpeg..|ffmpeg.. )& echo $!
Nevím proč mi to nenapadlo dřív :).
# cat /var/run/ffmpeg/109.pid 28767
28767 ? S 0:00 /bin/sh /etc/init.d/ffmpeg-hls-restream startVypadá to takto:
28767 ? S 0:00 /bin/sh /etc/init.d/ffmpeg-hls-restream start 28768 ? S 0:00 \_ sudo -u vlc /usr/local/bin/ffmpeg -loglevel quiet -i udp://@... 28769 ? S 0:00 \_ /usr/local/bin/ffmpeg -loglevel quiet -f mpegts -i - -c copy ...Po killu 28767 zmizí jen ten jeden řádek, ale ty ffmpegy si žijou dál. Divný. :(
start-stop-daemon --stop --signal 9 --oknodo --pidfile "$PIDFILE" --exec /usr/local/bin/ffmpeg
Předpokládám, že sudo využíváš pouze pro přepnutí na jiného uživatele. Místo sudo bych použil přímo start-stop-daemon a ffmpeg rouru by jsem spouštěl ze skriptu $DAEMON_WRAPPER:
start-stop-daemon --start --quiet --pidfile $PIDFILE
--chuid $DAEMONUSER --background --make-pidfile --exec $DAEMON_WRAPPER -- $ARGS
Vše poté zabiješ pomocí:
pkill -P $(cat $PIDFILE)
Proměná $ARGS se využívá k předání parametrů skriptu $DAEMON_WRAPPER, je na tobě co všechno mu budeš předávat. Wrapper bude zajišťovat spuštění pouze jedné instace ffmpeg roury, v init.d skriptu máš cyklus for, který postupně spouští X různých instací. Závorky zruš, stejně jako sudo a ukládání PID do PIDFILE na konci roury, to zařídí start-stop-daemon. Pod pojmem "ffmpeg roura" mám na mysli (tj. celou jednu instaci):
FFMPEG1 PARAM_1 PARAM_N |FFMPEG2 PARAM_2 PARAM_N
start-stop-daemon zařídí forknutí wrapperu na pozadí, spuštění pod definovaným uživatelem, vytvoření $PIDFILE, kde bude PID právě tohoto forknutého wrapperu, ve kterém budeš spouštět ffmpeg rouru bez přesunu na pozadí (tj. žádný ampersand na konci roury), ffmpeg roura má jako rodiče právě wrapper, takže když pozabíjíš jeho potomky, máš vyřešeno. Ano, uděláš to příkazem pkill místo "start-stop-daemon --stop", protože rodič se ukončí sám, jakmile budou pozabíjeni potomci, protože nedělá nic jiného než, že čeká na jejich dokončení. Na vhodném místě si ještě smaž PIDFILE, třeba v init.d skriptu po pozabíjení potomků. Můžeš jim nejprve poslat SIGTERM, vyčkat, sjistit pomocí pgrep zda-li ještě potomci běží a případně jim poslat SIGKILL, pokud budou běžet i po uplynutí definované doby.
$ man start-stop-daemon
Ne, takto jsem to vůbec nemyslel. Psal jsem, ať si uděláš skript $DAEMON_WRAPPER, do kterého vložíš spouštění ffmpeg a případné potřebné argumenty mu předáš pomocí proměné $ARG. Možná ti níže uvedený fragment pomůže v pochopení jak jsem to myslel.
# vim init.d/ffmpeg-hls-restream
...
DAEMON_WRAPPER=/usr/local/bin/ffmpeg_wrapper.sh
...
do_start() {
...
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $DAEMONUSER --background --make-pidfile --exec $DAEMON_WRAPPER -- $ARGS
...
do_stop() {
...
pkill -P $(cat $PIDFILE)
...
# vim /usr/local/bin/ffmpeg_wrapper.sh
...
if [ $vcodec ]; then
/usr/local/bin/ffmpeg -loglevel quiet -i $source -flags -global_header -profile:v baseline -c:v $vcodec -b:v $bitrate -maxrate $vbvmaxrate -bufsize $vbvbufsize \
-deinterlace -vf "crop=in_w$vcrop:in_h$vcrop,scale=$width:$height" -keyint_min $keyint_min -g $gop -c:a $acodec -b:a $abitrate -ar $asrate \
-f mpegts - | /usr/local/bin/ffmpeg -loglevel quiet \
-f mpegts -i - -c copy -hls_time $seglen -hls_list_size $numsegs -hls_base_url $index_url -hls_flags delete_segments -hls_segment_filename $dst $index \
-f mpegts -c copy -f mpegts udp://@$udp_dst
...
ffmpeg ... | ffmpeg .... | ffmpeg ... & ps -o "%p %c" --no-headers --ppid $$ | sed -n '/ffmpeg\|vlc/{s/ffmpeg//;s/vlc//;p}' | tr -d '\n' > pid.txt
Řešení s file deskriptory bych vám také mohl nabídnout, ale jelikož to máte stejně ve skriptu, který spouštíte (tj. máte rodiče a jeho pid se nechá získat pomocí $$), není nutné to hned hrotit :); tohle by mělo vrátit co potřebujete. Stačit by mělo už jen kill -9 $(cat pid.txt).
Tiskni
Sdílej: