출처
설명
주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 쉘 프로세스를 대체합니다. 예를 들어 bash 쉘에서 자바 프로그램을 실행하면 자바 프로그램의 ppid가 bash 쉘이 되고, 자바 프로그램이 bash 쉘의 하위 프로세스로 실행됩니다. exec 커맨드로 실행하면 bash쉘의 프로세스가 자바 프로그램이 됩니다. ppid가 따로 업습니다. 그리고 자바프로그램이 종료되면 프로세스가 종료됩니다. bash 쉘로 돌아오지 않습니다.
다음의 상황을 살펴보면 macbook에서 masternode로 접근하여 echo 를 실행하면 masternode의 bash쉘입니다. exec로 명령을 실행하면 bash쉘이 echo 명령으로 대체되고, 종료되면 bash쉘이 없기 때문에 다시 macbook으로 돌아옵니다.
➜ macbook ✗ ssh root@masternode
[root@masternode ~]# echo "aa"
aa
[root@masternode ~]# exec echo "aa"
aa
➜ macbook ✗
주요 옵션
옵션 | 내용 |
---|---|
-c | 환경 변수가 없는 상태로 실행 |
-a [name] | 0번째 인수로 이름을 전달 |
-l | 0번째 인수로 대쉬를 전달 |
사용예제
$ exec echo "aa"
aa
$ exec java -cp '/etc/hadoop/conf' org.apache.hadoop.hdfs.server.datanode.SecureDataNodeStarter