Есть два очень простых способа:
С помощью командыps:
ps -o comm= $$
или
ps -h -o comm -p $$
где:
-h
или завершить все опции с помощью =
, чтобы не показывать заголовок. -o comm
для отображения только базового имени процесса(bash
вместо/bin/bash
). -p
перечислить только процессы с предоставленным списком форм PID. Использование/procпсевдофайловой системы информации о процессе -:
cat /proc/$$/comm
Эта опция работает точно так же, как команда ps
выше.
или
readlink /proc/$$/exe
Это /proc/PID/exe
ссылка на исполняемый файл, который в данном случае будет указывать на /bin/bash, /bin/ksh и т. д.
Для получения только имени оболочки вы можете просто использовать
basename $(readlink /proc/$$/exe)
Это единственный вариант, который всегда будет давать один и тот же результат, даже если вы находитесь в сценарии, исходном коде или терминале, как ссылки на двоичный файл используемого интерпретатора оболочки.
Предупреждение Вы должны знать, что это покажет окончательный двоичный файл, поэтому ksh может быть связан с ksh93 или sh с bash.
Использование /proc
действительно полезно через /proc/self
, который связывается с PID текущей команды.
clock_nanosleep
— это системный вызов, т. е. API, доступный ядром для пользовательского пространства. Вы найдете его определение здесь .
clock_nanosleep
опирается на ряд определений часов , в частности на запись nsleep
в этих структурах. Это указывает на common_nsleep
, который является оболочкой вокругhrtimer_nanosleep
.
Это связь между ними:clock_nanosleep
— системный вызов, а hrtimer_nanosleep
— внутренняя функция ядра, используемая для его реализации. Вы не можете вызвать последнюю из-за пределов ядра, только первую.
hrtimer_nanosleep
также используется для реализации других системных вызовов, например nanosleep
.