저는 C++로 제작하고있는 임베디드 리눅스 프로젝트가 있습니다. 아치는 팔이고 프로세서는 프리 스케일 imx6입니다. ("alsasink 장치 = ossmix" "&"파일 이름 "// %의 오디오 싱크 = GST-발사 playbin2의 URI = 파일", sysdev) 의 sprintf를 :C++ 앱 내에서 마지막 배경 pid를 결정하십시오.
내가 사용하여 백그라운드에서 여러 오디오 파일을 실행하고 ; 다음에 의해 실행 : 시스템 (sysdev) 나는 또한 execvp를 사용하여 시도했다.
결과를 읽은 후 : $!
이 모두는 콘솔에서 잘 작동하지만 C++ 프로그램에서는 $! 결과를 반환하지 않습니다. 실제로 사용합니다 : echo $! &> result.dat를 사용하여 결과를 프로그램 내에서 읽은 파일로 파이프합니다. 문제는 프로그램 내에서 result.dat는 결코 데이터를 얻지 못한다는 것입니다. 아무것도 반환하지 않습니다.
제 생각에는 환경과 관련이 있습니다.
먼저 내 접근 방식을 사용할 수 있습니까?
나는 리눅스에 상당히 익숙하지만, 이해할 수있는 것은 내가 실행하는 프로그램에 PID를 발행 할 수 없다는 것이다. 나의 유일한 선택은 그들이 일어날 때 주어진 것들을 알아내는 것이다.
2 개의 동일한 사운드가 두 번 실행될 가능성이 있기 때문에 ps의 결과를 스캔하는 것만으로 충분하지 않습니다.
미리 양해 해 주셔서 감사합니다. 크리스
업데이트 : 나는 그것을 얻었다. 나는 fork()를 사용했고 자식에서는 단순히 execlp()를 호출했습니다. 상위 항목에서 하위 PID를 기록했습니다. 마지막으로 waitforpid (WNOHANG)를 사용하여 모든 포크의 상태를 모니터링하여 정보를 업데이트하는 스레드를 만들었습니다.
[고급 Linux 프로그래밍] (http://advancedlinuxprogramming.com/) 읽기; 프로세스에 관한 좋은 장을 가지고 있습니다. –