Возможно, вы могли бы сделать это, пройдя назад по наследству оболочки и выяснив, была ли она запущена чем-то, что приравнивается к «вам», или другой программой.
Получите PID оболочки (идентификатор процесса) и, следовательно, его PPID (идентификатор родительского процесса). Продолжайте идти вверх, пока не доберетесь до чего-то, что скажет вам, откуда это произошло. Возможно, вам придется экспериментировать на вашей системе - по крайней мере, я не знаю, будет ли она универсальной.
Например, в моей системе получите PID оболочки и используйте, ps
чтобы показать, что это bash
:
$ echo $$
18852
$ ps --pid 18852
PID TTY TIME CMD
18852 pts/1 00:00:00 bash
Получить PPID 18852:
$ ps -o ppid= -p 18852
18842
Узнайте, что такое PPID (18842):
$ ps --pid 18842
PID TTY TIME CMD
18842 ? 00:00:02 gnome-terminal
Мы видим, что это gnome-терминал, то есть эмулятор терминала / окно терминала. Может быть, этого достаточно, если ваша оболочка, запущенная другой программой, не работает в окне эмулятора терминала.
Если это не достаточно хорошо, поднимитесь на другой уровень:
$ ps -o ppid= -p 18842
2313
$ ps --pid 2313
PID TTY TIME CMD
2313 ? 00:00:00 init
Это говорит нам о том, что gnome-terminal
было начато init
. Я подозреваю, что ваша оболочка, запущенная другой программой, будет иметь что-то другое.
env
команду. Посмотрите, есть ли переменная, специфичная для VS, которую мы можем использовать.