Нет переносимого способа сделать это, но в Linux 2.6.9 и выше имя процесса можно изменить с помощью prctl()
с помощью операции PR_SET_NAME
, поэтому нам просто нужно немногоFFI, чтобы использовать его из Haskell.(Обычно хорошей идеей является проверка наличия каких-либо привязок на Hackage, но в этом случае я не смог их найти).
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign.C
foreign import ccall "sys/prctl.h prctl"
prctl :: CInt -> CString -> CULong -> CULong -> CULong -> IO CInt
setProgName :: String -> IO ()
setProgName title =
withCString title $ \title' -> do
res <- prctl pr_set_name title' 0 0 0
return ()
where pr_set_name = 15
Кажется, это хорошо работает для изменения имени, видимого ps
.Однако значение, возвращаемое getProgName
, кажется, кэшируется при запуске программы, поэтому вам придется объединить это с withProgName
, чтобы увидеть изменения в вашей программе.