Skip to content

Instantly share code, notes, and snippets.

@sqbing
Created October 17, 2013 08:36
Show Gist options
  • Select an option

  • Save sqbing/7021278 to your computer and use it in GitHub Desktop.

Select an option

Save sqbing/7021278 to your computer and use it in GitHub Desktop.
Set process name in Linux/Mac.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int setproctitle(const char ***ppp_argv, const char *title)
{
int i = 0;
int size = 0;
const char **pp_argv = *ppp_argv;
const char **pp = NULL;
char *p = NULL;
char *p_new_argv = NULL;
// count argv
for(i = 0; pp_argv[i]; i++)
{
size += strlen(pp_argv[i]) + 1;
}
// count environ
pp = pp_argv + i;
pp++;
for(i = 0; pp[i]; i++)
{
size += strlen(pp[i]) + 1;
}
size += 2;
p_new_argv = (char *)malloc(size);
if(!p_new_argv){
return -1;
}
memset(p_new_argv, 0, size);
p = p_new_argv;
// copy argv
for(i = 0; pp_argv[i]; i++)
{
memcpy(p, pp_argv[i], strlen(pp_argv[i]));
p += strlen(pp_argv[i]) + 1;
}
p++;
// copy environ
pp = pp_argv + i;
pp++;
for(i = 0; pp[i]; i++)
{
memcpy(p, pp[i], strlen(pp[i]));
p += strlen(pp[i]) + 1;
}
// copy title
memset((void*)pp_argv[0], 0, strlen(title)+1);
memcpy((void*)pp_argv[0], title, strlen(title));
// reset argv
pp_argv = (const char **)&p_new_argv;
return 0;
}
int main(int argc, const char *argv[])
{
setproctitle(&argv, "hello world");
printf("after set title\n");
sleep(20);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment