abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:22 | Nová verze

    Byla vydána nová verze 9.7 multiplatformní digitální pracovní stanice pro práci s audiem (DAW) Ardour. Přehled novinek, vylepšení a oprav v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 18:22 | Komunita

    Vývojáři webového prohlížeče Ladybird dnes oznámili, že mění způsob vývoje. S blížícím se vydáním alfa verze přestávají přijímat veřejné pull requesty. Všechny otevřené veřejné pull requesty budou uzavřeny. Tým nedokáže garantovat bezpečnost AI generovaných pull requestů.

    Ladislav Hagara | Komentářů: 2
    včera 17:33 | Zajímavý software

    OpenLogi (GitHub) je open source náhrada aplikace Logi Options+ pro přizpůsobení myší od společnosti Logitech. Zatím běží pouze na macOS.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za květen (YouTube).

    Ladislav Hagara | Komentářů: 9
    4.6. 11:22 | Bezpečnostní upozornění

    Úřad pro ochranu osobních údajů řeší desítky stížností na jednotné měsíční hlášení zaměstnavatele, které stát spustil počátkem dubna. Systém, jenž má firmám odlehčit od desítek formulářů, nejenže výrazně zatížil jejich účetní oddělení, ale docházelo v něm i k únikům osobních dat zaměstnanců k firmám, kde nepracovali. Podle ministerstva práce a sociálních věcí stála za problémem technická chyba. „Incident se týkal několika stovek

    … více »
    Ladislav Hagara | Komentářů: 15
    4.6. 10:46 | Nová verze

    Byla vydána (𝕏, Bluesky) nová verze 22.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    4.6. 04:33 | Nová verze

    Vim Classic byl vydán ve verzi 8.3. Drew DeVault oznámil tento fork editoru Vim (verze 8.2.0148, tj. těsně před zavedením Vim9 skriptování) v březnu letošního roku. Důvodem forku bylo, že vývojáři editorů Vim a Neovim začali při vývoji využívat LLM.

    Ladislav Hagara | Komentářů: 7
    4.6. 03:44 | Komunita

    Open source konference DevConf.CZ 2026 proběhne 18. a 19. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.

    Ladislav Hagara | Komentářů: 0
    3.6. 19:44 | Nová verze

    Společnost JetBrains uvolnila verzi 2 svého open-source velkého jazykového modelu (LLM) pro vývojáře Mellum.

    Ladislav Hagara | Komentářů: 0
    3.6. 14:44 | IT novinky

    Probíhá konference Microsoft Build 2026. Microsoft představuje své novinky: kvantový čip Majorana 2, Surface Laptop Ultra a Surface RTX Spark Dev Box s NVIDIA RTX Spark, Intelligent Terminal, Coreutils for Windows (fork Rust Coreutils), AI modely MAI, AI agenta Scout, platformu pro agent-first zařízení Project Solara, …

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (12%)
     (8%)
     (2%)
     (15%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1833 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    CryoPID - zmražte procesy s horkou hlavou

    10.9.2009 01:36 | Přečteno: 1269× | programování | poslední úprava: 17.11.2009 21:33

    Jednou jsem ladil pythoní program s race condition, která se vyskytovala výjimečně (pravděpodobnost cca 1:1000-1:100) když bylo spuštěno mnoho instancí daného programu paralelně. Identifikovat moment, kdy se invariant porušil nebylo těžký, jenže zalogování nestačilo - a python nemá nástroj pro "ekvivalent" coredumpu, který by se pak později mohl prohlédnut debuggerem.

    Po delším googlení jsem narazil na projekt CryoPID, který umí zmrazit proces do ELF binárky na disku (ta pak pokračuje od momentu zmražení). Přeložit to nebylo nic snadné (nadával jsem než se mi to povedlo zprovoznit přes různé hacky).

    Download

    Binárky a ohackované zdrojáky mají původ v momentálním mercurial tip (7da69201d50e).

    Bohužel i386/i686 binárky nemám, protože po překladu v 32bit chrootu nefungovaly. (Starší předkompilované binárky je možné stáhnout ze stránky projektu).

    Přenositelnost cryopid

    Vzhledem k tomu, že se cryopid linkuje jenom proti libz a glibc, mělo by to fungovat všude. Vyzkoušel jsem to na Gentoo glibc 2.8, Debianu Lenny a Etch. S Debianem problém nebyl, na Gentoo z nějakého důvodu nešlo obnovit zmraženy python2.5 procesy. Python 2.4 a 2.6 byly ok, spíš než na verzi jádra bych to tipoval na verzi knihoven. Segfault od zmraženého python2.5 procesu byl tak hustý, že i gdb lakonicky zahlásilo "Process no longer exists".

    Holt CryoPID není dokonalý, ale smekám proti tomu co umí.

    Ohackované zdrojáky obsahují copy-and-pastnuté definice maker _syscall2 a _syscall4, které myslím od jádra 2.6.20 nejsou součástí kernel-headers (nebo kernelu samotného). Podobně pro i686 bude nejspíš stačit nadefinovat (copy-and-pastovat syscall kód přes int 0x80). Příliš do kernel developmentu nevidím, pokud víte jak nahradit tyhle makra, neváhejte se ozvat.

    Makefile-y ohackovaných zdrojáků obsahují include /usr/src/linux, tudíž pro úspěšný překlad buď musíte mít zdrojáky jádra nebo kompatilní kernel-headers.

    Zmrazování při detekci porušení invariantu při race condition (příklad)

    Pozn: já používám Komodo IDE remote debugger (dbgp.client, metoda brk), ale klidně by šlo použít třeba na winpdb nebo jiný debugger. Pointa zmražení je, že "odmražený" spuštený proces se rovnou připojí k debuggeru.

    #!/usr/bin/env python
    
    import sys
    
    sys.path.append("/opt/Komodo/")
    
    from dbgp.client import brk
    
    import os
    import subprocess
    import time
    
    class A(object):
        def __init__(self, **kwargs):
    	self.__dict__.update(kwargs)
        def __str__(self):
    	return str([(k, v) for (k, v) in self.__dict__.iteritems()])
    
    a = A(a=1, b=2, c="c")
    
    #Tady je nejaky test kde se zjisti ze se neco rozbilo a nedava smysl.
    #Kdyz se neco rozbilo, zavolame fork a freeznem childa
    
    pid = os.fork()
    if pid > 0: #parent
        argv = ["/home/ondro/bin/cryopid", "-l", "child.cryo", str(pid)] 
        p = subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        l = p.communicate()
        p.wait()
        print l[0]
        print l[1]
    
        print "Freeze finished"
        sys.exit(0)
    elif pid == 0: #child
    
        time.sleep(5) #chceme se vyhnout race condition nez se proces zmrazi, systemovy semget() by byl lepsi
        brk(host="localhost", port=9000)
        for i in range(5):
    	print "Sleeping: ", i
    	time.sleep(1)
    
        print a
    else:
        print "Fork failed"
    

    Checkpointing software

    Když vás zajímjí podobné postupy, podívejte se na Checkpointing software.

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.