1. man getenv: As typically implemented, getenv() returns a pointer to a string within the environment list. The caller must take care not to modify this string, since that would change the environment of the process.
2. Даже если изменяем полученную строку, откуда гарантия, что можно писать за пределы существующей строки? (настоящий размер блока памяти мы ведь не знаем!)
Я когда с такой проблемой сталкивался сделал простую bash обертку для java программы, а ее pid узнавал как дочерний пид от обертки. Ну а на основе этого сделать демона — пара пустяков. Хотя конечно если хочется смотреть в top, такой подход не решит проблему.
Мини-wrapper для Java приложений под *nix