[C#] (Auto)Zamykanie procesu gdy ukończy swoją pracę

Mam problem, z którym borykam się od dawna. Otóż gdy startuję proces aplikacji konsolowej (po uprzedniej konfiguracji) to po zakończeniu swojego działania leży w pamięci i nic nie robi. Dniami w internecie szukałem rozwiązania (ostatecznie dałem stały time 10s na zamknięcie, ale nie zamyka to tego tematu).
Czy da się w jakikolwiek sposób zmusić proces do

  1. samozamknięcia się lub
  2. dania jakiejkolwiek oznaki zakończenia swojej pracy?

Coś skopsałeś lub robisz coś mocno niestandardowego. Aplikacja po zakończeniu czyli zwróceniu 0 z funkcji main to znak dla systemu, że program wykonał się poprawnie.
Jeśli jest inaczej to albo program jest servicem, albo uruchamiasz w nim wątki których nie kończysz, a tym samym nie kończy się działanie programu.

1 polubienie

W tym wypadku to aplikacja konsolowa systemu kontroli wersji Git. W sumie to nie wiem, co robię niestandardowego. Nie ważne, czy wykonuje się poprawnie, czy z błędem, zawsze zalega w pamięci. Podsyłam snippet (jedyne miejsce, gdzie ustawiam coś w procesie, później po 10 sekundach ubijam i pobieram wartości ze standardowego wyjścia, które są spójne).
Przechwytywanie

System.Diagnostics.Process.Kill(…)

Off-topic. Przeczytaj pytanie zapisane w dwóch punktach i dopiero wtedy odpowiadaj.

1 polubienie

Uruchamianie jednej aplikacji w drugiej nie jest do końca czymś standardowym.
Zastanawiam się tylko po co Ci aplikacja do gita. Nie wiem co robisz, ale może jest 2% sytuacji w których trzeba napisać program wykonujący jakieś akcje na git’cie i nie sądzę by to był jeden z tym przypadków. Najbardziej oczywistym przykładem gdzie trzeba wywoływać gita z poziomu własnego kodu to jest plugin integrujący IDE z Git’em. Innych przykładów i zastosowań wymagających tego nie jestem w stanie sobie wyobrazić.

Co do sedna problemu. Nie umiem Ci bardziej pomóc, ubijanie na siłę aplikacji nie jest dobrym pomysłem bo odbije się kiedyś czkawką. Na podstawie tego co podałeś szukałbym problemu z nieubiciem własnego procesu lub procesu gita który uruchomiłeś w ramach własnego kodu.

Najlepiej jednak użyć debugera i profilera, który w VS jest wręcz genialny. Jestem pewny, że tam znajdziesz odpowiedź na Twoje pytanie, a tym samym przyczynę problemu znacznie szybciej niż na forach nie podając kodu swojego programu.

1 polubienie

Akurat ja robię własny system synchronizacji projektu w Unity (bo Unity Collab się wysypał) i chciałem to zrobić przez gita. Najwyraźniej trzeba poszukać jakiejś biblioteki w C#, skoro nie da się wymusić autozamknięcia czy ogłoszenia stanu idle.

Nie wiem jaki to ma być system synchronizacji, że musisz opakować do tego gita i czemu nie wystarczy sam git. Ludzie robią synchronizację konfiguracji serwerów i kopie zapasowe serwerów przy pomocy gita (czystego) i to wszystko działa. Wprowadzają zmiany na jednym serwerze pushują do mastera a reszta serwerów sama się rekonfiguruje do zaktualizowanej konfiguracji. Kopie plików to akurat trochę inny temat bo nie każde pliki tak się da backupować.

Raz jeszcze napiszę co musisz zrobić - użyj debugera i profilera wbudowanego w VS. Nikt Ci nie pomoże bo to wróżenie z fusów, ewentualnie dzwoń do wróżbity Macieja, on ma karty, kulę i generalnie zna się na tym. Myślę, że da rade pomóc.

1 polubienie