Я думаю, что это должно сработать, чтобы проиллюстрировать принцип ...
#include <stdio.h>
int main(int argc, char *argv[]) {
argv[0][0] = 65;
sleep(10);
}
изменит имя и поставит букву «А» вместо первой буквы.CtrlZ для паузы, затем наберите ps
, чтобы увидеть, как изменилось имя.Я понятия не имею, но это кажется несколько опасным, поскольку некоторые вещи могут зависеть от argv[0]
.
Также я попытался заменить сам указатель на другую строку;без сигарыТак что это будет работать только с strcpy
и строками, которые короче или равны оригинальному имени.
Может быть или не быть лучшего способа для этого.Я не знаю.
РЕДАКТИРОВАТЬ: нелитеральное решение: Если вы разветвляетесь, вы знаете PID ребенка (getpid()
у ребенка, результат fork()
у родителя).Просто выведите его куда-нибудь, где вы сможете прочитать его, и убейте дочерний элемент с помощью PID.
другое нелитеральное решение: создайте программные ссылки на исполняемый файл с другим именем (ln -s a.out kill_this_a.out
), затем при выполнении exec выполните ссылку.Имя будет именем ссылки.