Как перезапустить программу? Очевидно, вызвав exec(...) Но для этого нужно знать имя исполняемого файла программы. Если задать это имя жестко в программе, то это ограничит возможности переименования/перемещения программы. В Linux можно вызвать что-то вроде:
execlp("/proc/self/exe", "a.out", NULL);
/proc/self/exe (или /proc/<pid>/exe ) - это ссылка, всегда указывающая на исполняемый файл программы.
Для Solaris нужно использовать /proc/pid/object/a.out