Bash - 프로그램을 시작하는 일련의 함수 실행

Bash - 프로그램을 시작하는 일련의 함수 실행

exec*()Bash 셸이 프로그램을 시작하는 데 사용하는 함수 계열의 변형을 이해하고 싶습니다 . 예를 들어 이 system()함수는 을 사용하는데 execl()Bash는 무엇을 사용합니까?

몇 가지 조사를 했지만 터미널에서 입력한 명령을 실행하기 위한 Bash 소스 코드의 올바른 위치인지 모든 사람과 다시 확인하고 싶었습니다.

Bash 버전 4.2.53을 조사한 결과 execute_cmd.c.

  1. execute_disk_command()
// I think this is where bash forks a child
pid = make_child (savestring (command_line), async); 
...
exit (shell_execve (command, args, export_env)); 
  1. shell_execve (command, args, env)
// I think this is where the child invokes the new program
execve (command, args, env);

위의 제어 흐름이 맞나요?

답변1

왜 이것을 알고 싶어하는지 모르겠지만 :

단 하나의 exec 호출만이 실제로 시스템 호출입니다.execve()

다른 모든 exec*() 함수는 execve()의 프런트엔드 역할을 하는 라이브러리 함수일 뿐입니다. truss(1) 또는 복제를 사용하면 다음을 사용하지 않는 한 시스템 호출만 표시됩니다.truss -u libc::

관련 정보