2016-06-01 4 views
0

데몬이 자체 사용자를 가질 수 있기 때문에 루트 사용자로 서비스에 의해 프로세스를 실행하고 싶습니다. `su - user c`가 중복 프로세스를 생성하여 리눅스에서 다른 사용자로 명령을 실행하십시오.

하지만 system("su - root c ./testbin") 그것을 실행할 때, 시스템은 보여줍니다 두 프로세스 (나는 ps aux | grep testbin를 통해이를 확인) :

su - root c ./testbin 

및 단일 프로세스를 달성하는 방법

./testbin 

를?

답변

0
ps aux | grep testbin | grep -v grep 

나는 당신이 "grep"프로세스를 보았다고 생각합니다. 위의 명령을 사용하십시오.

0

"su"프로세스는 피할 수 없지만 testbin이 끝나기 전에 끝낼 수 있습니다. "잠"을 사용하여 원래의 질문은 다음과 같습니다

(su - root -c "sleep 120" &) ; ps aux | grep sleep 

당신이 GREP의 결과로 다수의 "SU"프로세스를 볼 것이다 그 라인을 여러 번 실행합니다. 서브 프로세스를 배경 처리 는 다음과 같이 끝 부분에 스와 과정을 수 있습니다 :

(su - root -c "sleep 120 &" &) ; ps aux | grep sleep 

당신이 "SU"프로세스 목록에서 사라질 것을하지만 수면 명령을 계속 볼 수있는 라인을 여러 번 실행

.

큰 따옴표 안에있는 앰퍼샌드는 하위 프로세스 용이며 괄호 바로 앞에있는 앰퍼샌드는 한 줄로 질문을 수행하고이 경우를 테스트하는 데 필요한 'su'명령에 대한 것임을 유의하십시오.

'execv'와 동일한 명령 줄이 있는지 확인했지만이 경우는 아닙니다. 또한 'su'는 호출자의 권한으로 실행되는 프로세스이고 su의 하위 프로세스는 'su'가 분기하는 프로세스의 권한으로 실행됩니다. 나는 보안상의 이유로 'execv'가 'C'에서 'su'프로세스를 자식으로 대체 할 수 없다는 것이 논리적 인 것처럼 보입니다.

+0

답해 주셔서 고맙습니다. 지금 내 testbin 프로세스 만 나열하고 실제로 su 명령 프로세스였습니다. –