LINUX.ORG.RU

Объсните схему запуска


0

1

Насколько я знаю, если в начале файла есть заголовок ELF, linux запускает его как бинарный, т.е создаёт для него отдельный процесс. А что происходит если в начале файла нету этого заголовка?


Если есть shebang - исполняется указанным интерпретатором.

Deleted
()

Перебираются зарегистрированные в ядре модули-загрузчики. Обработчики ELF, и #! — это типичные таковые модули. А вообще может быть любой модуль, например, для запуска PE.

geekless ★★
()

А что происходит если в начале файла нету этого заголовка?

[12:22:01][aitap@Tarkus ~]> head -c 1024 /dev/zero > ./file
[12:37:53][aitap@Tarkus ~]> chmod +x ./file
[12:37:58][aitap@Tarkus ~]> ./file
bash: ./file: не могу запустить бинарный файл
[12:37:59][aitap@Tarkus ~]126>

AITap ★★★★★
()

Впринципе franchukroman уже тебе ответил, я просто пример приведу. Если файл начинается с #!/bin/sh , то он будет скормлен программе sh , если #!/bin/perl то перлу и т. п.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Ну вот к примеру, если я запускаю файл в GNOM'е, GNOM просто генерирует системный вызов exec с аргументом пути к файлу. А дальше ядро само парсит заголовок файла и загружает его в память. Но в таком случае как же GNOM выбирает для него значок? По расширению? И ещё: при запуске файлов с shebang-последовательностью GNOM должен же ведь отпарсить текстовый файл со скриптом, чтобы получить путь к интерпретатору для подачи exec? Или в linux просто можно подать exec к любому файлу, а ядро само решает можно ли запустить файл или нет, если нет, то вернёт ошибку? Как вообще GNOM решает какую программу запустить для открытия файла?

dump
() автор топика
Ответ на: комментарий от dump

как же GNOM выбирает для него значок?

libmime. Можешь увидеть эту магию, натравив file на что угодно. Хотя если есть расширение, то гном использует его (тупо быстрее и надёжнее).

x3al ★★★★★
()
Ответ на: комментарий от dump

Или в linux просто можно подать exec к любому файлу, а ядро само решает можно ли запустить файл или нет, если нет, то вернёт ошибку?

Именно.

x3al ★★★★★
()
Ответ на: комментарий от x3al

Но при этом проверяется, есть ли права на запуск файла (+x).

x3al ★★★★★
()
Ответ на: комментарий от schizoid

Как я понял, ТС имел в виду запуск из наутилуса, а он не убивается, когда запускаешь файл из него. Хотя если какая-нибудь менюшка, то в ней конечно можно и без форка.

Xenon ★★★
()
Ответ на: комментарий от Xenon

Ну вот к примеру если подать exec к графическому файлу картинки, то ядро вернёт ошибку, даже если разрешены прав на запуск? Но чтобы корректно открывать файлы и показывать значки наутилус всё же парсит заголовки файлов? Ну, парсинг помогает например с shebang-последовательностью, в которой явно указан путь к программе, для которой нужно подать exec, а как быть с картинками? Ведь в начале таких файлов не указаны пути. Как наутилус узнаёт путь к исполняемому файлу графического редактора, к которому нужно подать exec?

dump
() автор топика
Ответ на: комментарий от dump

Может в наутилусе пути указаны в .ini-файле?

dump
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.