Pull to refresh

Comments 10

Можно проще:

java -Dmy_daemon=true …
ps ax | grep my_daemon
Можно ещё проще
pgrep -f «java -Dmy_daemon» > список PID
Такая короткая программа, а аж две ошибки!

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. Даже если изменяем полученную строку, откуда гарантия, что можно писать за пределы существующей строки? (настоящий размер блока памяти мы ведь не знаем!)
Касательно замечаний согласен, код подправил.
Зато допущена третья ошибка: подразумевается, что java_bin[0] == 0, но это не гарантируется, так как malloc() память не инициализирует.
Я когда с такой проблемой сталкивался сделал простую bash обертку для java программы, а ее pid узнавал как дочерний пид от обертки. Ну а на основе этого сделать демона — пара пустяков. Хотя конечно если хочется смотреть в top, такой подход не решит проблему.
Кстати, в качестве argv[0] в execv тоже нужно указывать имя запускаемого приложения…
Так в этом то и вся суть. В результате такого действия мы подменяем процесс, но имя запущенного процесса остается прежним.

Иначе не было бы потребности всю эту кашу заваривать.
Понял… То есть, в top показывается именно содержимое argv[0]?
Да, это содержимое используется при отображении информации top/ps.
Sign up to leave a comment.

Articles