프로그램에서 사용하는 실행 파일 목록을 보거나 가져오는 방법이 있습니까?
구체적인 예는 문서 스크롤 휠입니다. unrar 및 p7zip-rar와 같이 동일한 작업에 대한 실행 파일이 여러 개 있는 경우 어떤 실행 파일을 사용하는지 확인할 수 있는 방법이 있습니까?
"ldd" 프로그램을 사용하면 프로그램에서 사용하는 라이브러리를 볼 수 있지만 실시간으로 볼 수는 없습니다. 동등한 실행 파일이 있습니까? 바람직하게는 라이브입니까? 아니면 다른 방법?
답변1
부터 시작해 보세요스트레스. 프로그램이 다른 프로그램을 호출할 때 이러한 exec
시스템 호출 중 하나를 사용합니다. 예를 들어, 다음 Ruby 스크립트가 제공됩니다.
#!/usr/bin/env ruby
system("ls")
system("df")
strace
출력을 grep하여 어떤 실행 파일이 실행되는지 확인할 수 있습니다.
$ strace -f ./test.rb 2>&1 | grep exec
execve("./test.rb", ["./test.rb"], [/* 23 vars */]) = 0
execve("/opt/opscode/embedded/bin/ruby", ["ruby", "./test.rb"], [/* 23 vars */]) = 0
[pid 7696] read(5, "ame+. If the +exec_name+\n # is"..., 8192) = 8192
[pid 7698] execve("/bin/ls", ["ls"], [/* 23 vars */] <unfinished ...>
[pid 7698] <... execve resumed> ) = 0
[pid 7700] execve("/bin/df", ["df"], [/* 23 vars */] <unfinished ...>
[pid 7700] <... execve resumed> ) = 0
이렇게 -f
하면 strace가 하위 프로세스도 추적할 수 있습니다. 처음에는 내 스크립트를 실행하는 쉘과 루비 인터프리터를 볼 수 있습니다. 그러면 이 스크립트가 /bin/ls 및 /bin/df도 실행하는 것을 볼 수 있습니다. 이 방법은 런타임에 사용된 실행 파일만 표시하며, 런타임 상태가 다를 경우 사용할 수 있는 모든 실행 파일은 표시하지 않습니다.
답변2
쉬운 방법은 을 사용하는 것입니다 top
.
file-roller
또는 사용 할지 여부를 결정하려면 unrar
터미널에서 실행하고 p7zip-rar
.top
file-roller
rar 파일을 추출하는 동안 터미널을 살펴보세요. 사용 중인 경우 unrar
최상위 프로세스는 이고 unrar
, 사용 중인 경우 p7zip-rar
최상위 프로세스는 입니다 7z
.