필자는 시스템에서 일부 프로세스를 시작하기 위해 bash 스크립트를 작성했습니다. 단순히 프로세스와 관련 구성 파일을 호출합니다. 커맨드 라인에서 호출하는 것과 같습니다. 쉘에서 스크립트를 호출하는 것과 system()을 사용하는 것의 차이점은 무엇입니까?
#!/bin/bash
# Start specified process in a new session
setsid $1 &>/dev/null &
그래서
someprocess
를 시작, 내가 명령 줄에서 부를 것이다 :
[email protected]:~# start someprocess
을이 마법처럼 작동합니다. 매번 모든 프로세스. 그러나 다른 실행중인 C++ 프로세스에서 system
호출을 만들 때 someprocess
은 절대로 시작되지 않습니다.
system("start someprocess")
이 프로세스는 내 프로세스의 90 %에 해당합니다 (단 하나만 제외). 작동중인 프로세스와 작동하지 않는 프로세스의 유일한 차이점은 작동하지 않는 프로세스가 독점 라이브러리를 사용한다는 것입니다. 나는 최근에 새로운 세션을 시작하는 것이 도움이 될 것이라는 희망으로 bash 스크립트에 setsid
옵션을 추가했지만 아무런 효과가 없었다. 나는 또한 popen
및 execv
을 시도했습니다. 변경 없음.
그럼 내 질문은 무엇입니까 system()
과 함께 뭔가를 호출하고 그냥 명령 줄에서 동일한 호출을 만드는 차이점은 무엇입니까?
모든 프로세스는 Linux의 C++로 작성되었습니다.
다른 점 : 아마도 환경입니까? –
일반적인 용의자 인 LD_PATH, 환경 변수 등을 확인 했습니까? C++ 시스템 래퍼는 동일한 사용자 및/또는 루트 등입니까? 어떤 종류의 errno 값은 시스템, popen, execv 등에서 돌아오고 있습니까? – Duck
@Kerrek SB, @Duck'~ /. '에 환경 변수가 설정되어 있습니다.bashrc' 프로그램에서'system()'을 사용하여 프로그램을 시작할 때 어떻게 설정되어 있는지 확인하는 방법은 무엇입니까? 나는 bash 스크립트를 호출하는 것이'bashrc '가 소스로되어 있음을 의미한다고 생각했다. –