Можно ли заменить какой-то процес на init (exec c++)?
Здравствуйте, коллеги. У меня есть вопрос: можно ли заменить через exec (c++) (или exec + fork не важно) какой-то процесс в системе на процесс init? Или с init нельзя никак взаимодействовать? И никак не получится заменить им какой-то процесс?
Объясни, чего ты пытаешься добиться этим действием? Для процесса init имеет значение, какой у него PID. Если 1 -- он должен вести себя одним образом (как системный init), если не 1 -- то другим (как обычное приложение).
То есть хотите fork(), а потом в форкнутом процессе exec() на /sbin/init? Я не вижу препятствий, но и смысла не вижу - запуск init таким образом - это обычный запуск init с командной строки (bash поступает именно так)
progar prik, в чём вопрос? Думаю, ты чего-то другого хочешь. Если хочется получить другой процесс с PID=1, то нет, PID=1 может быть только один (ц) Дункан Маклауд, и PID=1 может образоваться только вызовом exec внутри PID=1. Естественно "из телеграма" это сделать нельзя (да и это была бы ахренительная дыра в безопасности).
Так-то в качестве init можно подсунуть другой процесс вместо обычного, надо ядру передать параметр init=, например, для откачивания умершей системы можно попробовать сделать init=/bin/bash и дальше разбираться (но это нужны хорошие скиллы, чтобы разобраться, так как, например, / будет read only, не будут смонтированы /dev /proc /sys, не будет работать сеть и много чего ещё...).
jcmvbkbc, хорошо, pid namespace и другие namespace позволяют получить "псевдосистему" с тем же ядром и отдельными процессами, файлами, сетью и даже именем хоста. Но "из телеграм" это всё равно не получится.
Можно просто запустить свой init. Эксперименты лучше проводить, передавая путь до приложения в переменной ядра в загрузчике. lunux ... init=/bin/bash
А еще лучше это делать в виртуалке :)