В справочной странице traceroute указано, что ! X
указывает на один из ответов ICMP об ошибке (кроме желаемого «Превышен TTL»). traceroute
отказывается, когда видит его. Похоже, mtr
более надежен.
Это странный случай. Я не могу понять, зачем вам заменять ответ «TTL превышен» на «административно запрещен», когда пакеты с достаточно большим TTL просто пропускаются. Спасибо mtr
за терпение этой странности :).
По истечении времени отключения можно напечатать дополнительную аннотацию:! H,! N, или! P (хост, сеть или протокол недоступны),! S (исходный маршрут не удалось) ,! F (необходима фрагментация),! X (административная связь запрещена),! V (нарушение приоритета хоста),! C (ограничение приоритета в результате ) или! (Код недоступности ICMP). Если почти все зонды приводят к какой-либо недоступности, traceroute прекращает работу и завершает работу.
Это предложение относится к системным вызовам fork
и exec
¹. Системный вызов fork
создает новый процесс, дублируя вызывающий процесс: после запуска fork
есть два процесса, каждый из которых имеет свою собственную память¹ с изначально идентичным содержимым, за исключением возвращаемого значения системного вызова fork
, идентификатора процесса и некоторых других отличий. Системный вызов exec
загружает изображение программы из файла и заменяет существующую память процесса этим изображением.
Для запуска программы в обычном смысле необходимо вызвать fork
, чтобы создать новый процесс для выполнения программы, а затем вызвать exec
в дочернем элементе для замены копия исходной программы по коду и данным новой программы. Это наиболее частое использование fork
(часто с некоторыми вещами, сделанными до exec
, такими как настройка перенаправления файлов).
Запуск exec
без выполнения fork
можно рассматривать как оптимизацию выполнения fork
+ exec
и родительского выполнения. выйти из
сразу после этого.Это не совсем эквивалентно, потому что fork
+ exec
/ exit
изменяет родительский элемент результирующей программы, тогда как прямой exec
не делает » т.
Флаг 1 процесса Linux сигнализирует о процессах, которые не вызывали exec
, поскольку они были разветвлены их родителем, то есть дочерними элементами (или внуками и т. Д.) Исходного процесса своей программы. Вызов fork
без вызова exec
имеет несколько применений. (Это не исчерпывающий список, это лишь некоторые распространенные варианты использования.)
fork
для реализации подоболочки (части сценария, в которых переменные, перенаправления и т. Д. Не влияют на основной сценарий). fork
, а затем родительский элемент завершается. Это обратная «оптимизации» exec
, о которой я упоминал выше, и делается для того, чтобы изолировать процесс демона от его исходного родителя, и, в частности, чтобы избежать блокировки исходного родителя, если он ждал, пока его дочерний процесс завершить (как, например, при запуске программы в оболочке без и
). ¹ Есть нюансы, которые здесь не имеют значения и выходят за рамки этого ответа.