Linux: Benennen Sie den vom Befehl ps angezeigten Prozess um

Nachtrag: Als ich danach suchte, hatte redis auch eine Implementierung. Redis ist eine BSD-Lizenz.

test.c


/*
 *  set process title for ps (from sendmail)
 *
 *  Clobbers argv of our main procedure so ps(1) will display the title.
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

//#include "setproctitle.h"

#ifndef SPT_BUFSIZE
# define SPT_BUFSIZE     2048
#endif

extern char **environ;

static char **argv0;
static int argv_lth;

void initproctitle (int argc, char **argv)
{
  int i;
  char **envp = environ;

  /*
   * Move the environment so we can reuse the memory.
   * (Code borrowed from sendmail.)
   * WARNING: ugly assumptions on memory layout here;
   *          if this ever causes problems, #undef DO_PS_FIDDLING
   */
  for (i = 0; envp[i] != NULL; i++)
    continue;

  environ = malloc(sizeof(char *) * (i + 1));
  if (environ == NULL)
    return;

  for (i = 0; envp[i] != NULL; i++)
    if ((environ[i] = strdup(envp[i])) == NULL)
      return;
  environ[i] = NULL;

  argv0 = argv;
  if (i > 0)
    argv_lth = envp[i-1] + strlen(envp[i-1]) - argv0[0];
  else
    argv_lth = argv0[argc-1] + strlen(argv0[argc-1]) - argv0[0];
}

void setproctitle (const char *prog, const char *txt)
{
        int i;
        char buf[SPT_BUFSIZE];

        if (!argv0)
                return;

  if (strlen(prog) + strlen(txt) + 5 > SPT_BUFSIZE)
    return;

  sprintf(buf, "%s -- %s", prog, txt);

        i = strlen(buf);
        if (i > argv_lth - 2) {
                i = argv_lth - 2;
                buf[i] = '\0';
        }
  memset(argv0[0], '\0', argv_lth);       /* clear the memory area */
        strcpy(argv0[0], buf);

        argv0[1] = NULL;
}

//Hauptfunktion zum Testen
int main(int argc, char* argv[])
{
  initproctitle(argc, argv);
  setproctitle("hoge", "AIUEO");

  printf("Hello my pid = %d\n", getpid());
  sleep(10);
  
  return 0;
}

Referenz:

postgres ps_status.c Die Änderung des Befehlsnamens wird durch verschiedene Methoden für jede Plattform realisiert.

/*
 * Alternative ways of updating ps display:
 *
 * PS_USE_SETPROCTITLE
 *	   use the function setproctitle(const char *, ...)
 *	   (newer BSD systems)
 * PS_USE_PSTAT
 *	   use the pstat(PSTAT_SETCMD, )
 *	   (HPUX)
 * PS_USE_PS_STRINGS
 *	   assign PS_STRINGS->ps_argvstr = "string"
 *	   (some BSD systems)
 * PS_USE_CHANGE_ARGV
 *	   assign argv[0] = "string"
 *	   (some other BSD systems)
 * PS_USE_CLOBBER_ARGV
 *	   write over the argv and environment area
 *	   (Linux and most SysV-like systems)
 * PS_USE_WIN32
 *	   push the string out as the name of a Windows event
 * PS_USE_NONE
 *	   don't update ps display
 *	   (This is the default, as it is safest.)
 */

Recommended Posts

Linux: Benennen Sie den vom Befehl ps angezeigten Prozess um
Linux: Verstehen Sie die Informationen, die vom Befehl top angezeigt werden
Befehl [linux] kill, um den Prozess abzubrechen
Informationen zu der Nummer (Abschnittsnummer) in (), die vom Linux-Befehl man angezeigt wird
Prozessbestätigungsbefehl ps Optionsmemorandum
Linux-Befehl Nr. 4
Linux-Befehl Nr. 3
[Linux] Verwendung des Befehls echo
Linux-Prozess
Linux: Korrigieren Sie die von malloc zurückgegebene Adresse
Benachrichtigen Sie Slack, wenn der Linux-Befehl beendet ist
Linux-Befehl Nr. 5
Passen Sie die Dateiberechtigungen mit dem Linux-Befehl chmod an
Es ist ein Mac. Was ist der Linux-Befehl Linux?
* Ken Komiya: "[Schreiben eines Python-Programmdokuments mit Sphinx] (https://docs.google.com/presentation/d/1mLw2ZHeyl_9jWAwxE3Hx7stY5msCd-jyl22PkKRCdqg/edit#slide=id.g885309dee8_0_166)" * Python Study Group # 43] (https://startpython.connpass.com/event/112788/) * cocodrips: "[Schreiben Sie in Zukunft einen Docstring für Ihre Teamkollegen und sich selbst] (https://www.slideshare) .net / cocodrips / docstring) "Python, SphinxLinux-Befehlsliste
Linux auf Befehl
[Linux] Suchbefehl
[Linux] Anzeigen der CPU-Auslastung mit dem Befehl ps, Anzeigen des Headers und nicht Anzeigen des Grep-Prozesses
Linux-Befehl <Basic 2>
Linux Server Befehl
Linux # Command Memo 1
Linux-Befehl [lesen]
Linux-Befehlsübersicht
[Linux] Befehl / Wissen
Mein Linux-Befehl
Linux-Befehl <Basic 1>
ps Befehl "wchan"
Linux-Befehlssammlung
Linux mkdir Befehl
Grundlagen der Linux-Befehle
[Linux] Git-Befehl
Linux (Befehlsspeicher)
Zeigen Sie nach und nach die Ausgabe des Befehls an, der von subprocess.Popen ausgeführt wird
[Linux] Führen Sie git pull regelmäßig mit dem Befehl crontab aus
Linux-Benutzer hinzufügen, wie der Befehl useradd verwendet wird
Über den Prozess, den der Linux-Kernel mit x86-Mikrocode verarbeitet
Multiplizieren Sie PDF mit OCR in der Befehlszeile unter Linux (Ubuntu).
(Denken Sie schnell daran) Verwendung der LINUX-Befehlszeile
Verstehen Sie die Attribute von Linux-Dateien (Befehl ls -l)
Problemumgehung, wenn Authentifizierung erforderlich angezeigt wird, wenn versucht wird, die Festplatte per USB-Boot unter Linux anzuzeigen