Przerwanie aplikacji konsolowej (SIGINT)

0

Witam, na wstępie chciałbym się przywitać gdyż to mój pierwszy post tutaj.

Przejdę do problemu. Potrzebuję w jakiś sposób wysłać sygnał CTRL+C to odrębnej aplikacji działającej w konsoli. Przerwanie procesu "na siłę" nie wchodzi w grę, musi to być sygnał SIGINT. Najlepiej gdyby dało się to zrobić podając PID procesu konsoli.
Wiem, że istnieje program, który wywołany signal.exe <PID> wysyła taki sygnał do aplikacji, jednak mi zależy na funkcji w c++.
Funkcja będzie umieszczona w dll'ce i byłbym wdzięczny gdyby jako jej parametr przy wywołaniu wystarczyło podać PID procesu, do którego chcę się wysłać SIGINT. Ewentualnie zamiast PID można by podać nazwę procesu.

Będę wdzięczny za każdą pomoc.
Pozdrawiam.

0

może funkcja System(string cmd) uruchamiająca to signal.exe z parametrami?

0

man 2 kill

NAZWA
       kill - wysłanie sygnału do procesu

SKŁADNIA
       #include <sys/types.h>
       #include <signal.h>

       int kill(pid_t pid, int sig);

OPIS
       Funkcja  systemowa  kill może służyć do przesłania dowolnego sygnału do
       dowolnego procesu lub do dowolnej grupy procesów.
 

Windows: http://stackoverflow.com/questions/813086/can-i-send-a-ctrl-c-sigint-to-an-application-on-windows

0

ok czyli teraz tak dla ścisłości, funkcja zostanie wywołana ze skryptu au3 mniej wiecej tak:
DllCall("kill.dll", "void", "zabij", "***", $PID, "int", "###")

parametry dllcall sa takie: 1: nazwa dll 2: typ zwracanej wartości 3: nazwa funkcji z dll
kolejne to typ parametru 1, parametr 1 ... typ parametru n, parametr n

jaki typ podać jako rodzaj zmiennej PID i jaki numer sygnału odpowiada SIGINT (bo jako typ int muszę wysłać z tego co rozumiem liczbę całk.)

Przepraszam za zamieszanie.

fragment funkcji z C++
#define Autoit extern "C" __declspec(dllexport)

Autoit void zabij(pid_t pid)
{
int kill(pid, SIGINT)
}


jednak kompilator na mnie pluje, wychodzi że jestem bardziej zielony niż przypuszczałem, powiedzcie mi jak napisać tą funkcję by dała sie wywołać z PID-em procesu ?
0

Zdecyduj się, czy piszesz dla Windowsa, czy dla Linuksa.

DLL w Linuksie? Kill w Windowsie?

0

Nie wiem czy udajesz tępego czy tak już masz. Skoro od początku (patrz 1-szy post) piszę w związku z dll to znaczy że piszę pod windowsa, dalej piszę że wywołanie nastąpi ze skryptu au3, to też język skryptowy pod windę. Masz jeszcze jakieś inne głupie pytania ?

0
Dymar napisał(a)

Masz jeszcze jakieś inne głupie pytania ?

Ja mam: kto Ci podsunął tak głupi pomysł, że pod Windows są uniksowe sygnały?

0

Czysto nie ma, to moje głupie przyzwyczajenie z czasów gdy korzystałem z cygwin-a.

Wracając do tematu szukam sposobu właśnie na wysłanie sygnału INT do procesu, którego znam nazwę lub PID.

1 użytkowników online, w tym zalogowanych: 0, gości: 1