Signal unter WIndows schicken



  • Hallo,

    unter Linux kann ich mit der Funktion kill(pid, signr) ein Signal an einen anderen Prozess schicken....
    wie geht das unter windows?
    Die Windows Funktion signal sendet nur an sich selbst, so wie ich das kapiert hab



  • Ferby schrieb:

    unter Linux kann ich mit der Funktion kill(pid, signr) ein Signal an einen anderen Prozess schicken...

    'kill' heisst 'signal schicken'?
    na, sei's drum, windows kennt das konzept von signalen wie bei unix-kisten und deren nachbauten nicht.
    aber für 'kill' unter windoofs gibt es: http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx
    🙂



  • Sind die Unix-Signale nicht sowas wie die Windows Messages? Dann wäre das Äquivalent zu einem kill doch wahrscheinlich ein SendMessage mit WM_DESTROY, oder?

    EDIT: Gilt natürlich für WinAPI...



  • _matze schrieb:

    Sind die Unix-Signale nicht sowas wie die Windows Messages? Dann wäre das Äquivalent zu einem kill doch wahrscheinlich ein SendMessage mit WM_DESTROY, oder?

    EDIT: Gilt natürlich für WinAPI...

    🙂 während eine message in eine warteschlange gepostet wird, um dann später in der programmausführung verarbeitet zu werden (i.e. windowproc), unterbricht ein signal, welches an einen prozess gesendet wird, die programmausführung. der signalhandler wird dann unmittelbar nach der unterbrechung ausgeführt. es ist also eher mit interrupts zu vergleichen 🙂

    edit:

    fricky schrieb:

    Ferby schrieb:

    unter Linux kann ich mit der Funktion kill(pid, signr) ein Signal an einen anderen Prozess schicken...

    'kill' heisst 'signal schicken'?
    na, sei's drum, windows kennt das konzept von signalen wie bei unix-kisten und deren nachbauten nicht.
    aber für 'kill' unter windoofs gibt es: http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx
    🙂

    nein, kill() hat nichts mit prozess beenden zu tun. kill versendet, wie schon erwähnt, ein signal an einen spezifizierten prozess :). eigentlich dachte ich, dass in der msvcrt ein equivalent existiert. ich konnte aber jetzt auch nichts finden 😮



  • man könnte(der sinn sei jetzt mal nebensächlich) speicher im zielprozess anlegen, dort positionsunabhängigen code einschleußen(zuvor die adressen der module bestimmen ASLR ist schon doof) und diesen code eine dll laden lassen, die dann eine pipe aufmacht und als signal ersatz fungiert.



  • ich habe nochmal ein wenig recherchiert. sieht nicht gut aus 😞

    http://en.wikipedia.org/wiki/Kill_(Unix)#Windows schrieb:

    An "unsupported" version of Kill was included in several releases of the Microsoft Windows Resource Kits (aka "RezKits") available for Windows NT 3.x, NT 4.0, Windows 2000 and Microsoft Windows Server 2003, the most efficacious of these being Version 3.5 of Kill, Copyright (C) 1994 Microsoft Corp. GNU versions of Kill have been ported via Cygwin and run inside of the unix os layer that Microsoft Windows Services for UNIX[2] provides (Microsoft acquired Windows Services for Unix wholesale via their purchase of Softway Systems and their Interix product in September 17, 1999).

    Although Kill adds much-needed granularity to the management of individual threads and executables in the win32 world, virtually none of the variants of Kill (either ported from the POSIX world, emulated or scratch-built binaries) retain the full functionality and ultimate control over running Windows processes as do the Unix counterparts.


Anmelden zum Antworten