Created
October 17, 2013 08:36
-
-
Save sqbing/7021278 to your computer and use it in GitHub Desktop.
Set process name in Linux/Mac.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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