Czy w Linuksie można jakoś odczytać wyjście (ze stdout i stderr) innego procesu, nie wiedząc o tym? Więc powiedzmy, że mam proces A działający w tle, a proces B chce odczytać jego wynik - czy to możliwe? Nie mogę użyć rur ani programu ekranowego. Próbowałem czytać z/proc/xxx/fd lub z/pts/x konsol i tak dalej, ale nic nie działało tak daleko.Linux: czy mogę odczytać dane wyjściowe innego procesu bez użycia żadnego IPC (potoki itp.)?
Odpowiedz
W jądrze mogę napisać sterownik, który przechwytuje odczyty i zapisuje, aby uzyskać to, co chcesz.
W przestrzeni użytkownika można skompilować zmodyfikowaną glibc, która wylogowuje wyjście stderr do pewnego pliku wraz z procesem i identyfikatorem wątku na przykład. Ale to ryzykowne, jeśli coś złamiesz. (Zakładając, że aplikacje, które chcemy śledzić nie są powiązane statycznie lub dokonywać bezpośrednich wywołań systemowych do jądra)
po prostu za pomocą dup2 funkcję:
int b_fd; /* This is the B process File descriptor*/
int a_fd /* This is the A process File descriptor*/
int main (int argc, char*argv[]){
/** I suppose that you can init the file descriptor for A*/
dup2(b_fd, a_fd);
/**Now everything that A will output will be written in B file descriptor*/
}
czytam wpływu na swoje pytanie, że jesteś nie zamierzam pisać kodu jądra, a pomysł nie polega na modyfikacji pliku wykonywalnego, który śledzisz.
Biorąc pod uwagę te ograniczenia, odpowiedź jest prosta. Nie, nie możesz. Proces wywołuje zapis (1 lub zapis (2, a te mogą być w dowolnym miejscu i nie ma wbudowanego w system "podsłuchu", który pomoże Ci zobaczyć ruch w drodze.)
- 1. Jak odczytać dane wyjściowe procesu potomnego bez blokowania w Rust?
- 2. Czy w systemie Linux proces może wyświetlać GUI innego procesu?
- 3. Dane wyjściowe polecenia Linux jako parametr innego polecenia
- 4. C# uzyskać dane wyjściowe procesu podczas pracy
- 5. Linux nieprzetworzone dane wejściowe bez uprawnień roota?
- 6. linux: programowo uzyskasz pid rodzicielski innego procesu?
- 7. Jak uzyskać dane wyjściowe odrodzonego procesu child_process w pliku Node.JS?
- 8. Przekierowanie wyjściowe procesu C#
- 9. Przykładowe potoki IPC z czasem oczekiwania na zapis/zapis
- 10. Jak odczytać wyjście polecenia Android procesu
- 11. Wymienione potoki w systemie Windows i Linux
- 12. Wybór Linuxa IPC?
- 13. Jak asynchronicznie uzyskać subprocessowe dane wyjściowe?
- 14. Wyślij dane wejściowe z klawiatury do działającego procesu linux
- 15. Jak mogę studiować EtherCAT bez żadnego tła?
- 16. Gradle - czy mogę dołączyć dane wyjściowe zadania do zależności projektu
- 17. Linux C++: Jak wyświetlić dane wyjściowe aplikacji Tekst poza stdout?
- 18. Czy mogę poprawnie odczytać dane binarne za pomocą XDomainRequest?
- 19. Jak uzyskać dane wyjściowe zadania przesiewowego do innego zadania gruntowego?
- 20. Jak odczytać dane wyjściowe operatora show do zestawu danych?
- 21. Jak odczytać dane wyjściowe polecenia IPython% prun (profiler)?
- 22. Jak przetestować "dodaj" w DAO bez użycia "znajdź" itp.?
- 23. Jak mogę sprawdzić, czy inna aplikacja zarejestrowała kanał Remoting IPC?
- 24. Wyłącz wyjściowe dane wyjściowe logcat w Androidzie
- 25. czy% x [] przechwytuje wszystkie dane wyjściowe?
- 26. Jak mogę uporządkować cały mój kod, dane, skrypty, zadania itp.?
- 27. Jak mogę odczytać dane binarne z wfstream?
- 28. Jak mogę odczytać dane cx_Oracle.LOB w Pythonie?
- 29. Dane wyjściowe dziennika przetwarzania wieloprocesowego. Przetwarzanie
- 30. konkatować dane wyjściowe podzapytania?
Czy spojrzałeś na rzeczy takie jak LD_PRELOAD lub ptrace? – ezpz