一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - Linux下C語言修改進(jìn)程名稱的方法

Linux下C語言修改進(jìn)程名稱的方法

2021-03-04 10:29share_good C/C++

這篇文章主要介紹了Linux下C語言修改進(jìn)程名稱的方法,涉及Linux下使用C語言操作進(jìn)程的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了LinuxC語言修改進(jìn)程名稱的方法。分享給大家供大家參考。具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
#include "./util/setproctitle.c"
// extern char **environ;
// int main(int argc , char *argv[])
// {
// int i;
// printf("argc:%d\n" , argc);
// for (i = 0; i < argc; ++i){
// printf("0x%x\n" , argv[i]);
// printf("argv[%d]:%s\n" , i , argv[i]);
// }
// printf("evriron=%x\n" , environ[0]);
// return 0;
// }
int main(int argc, char **argv){
 spt_init(argc,argv);
 setproctitle("設(shè)置進(jìn)程名為:this is a test");
 sleep(1000);
 return 0;
}

setproctitle.c文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/* ==========================================================================
 * setproctitle.c - Linux/Darwin setproctitle.
 * --------------------------------------------------------------------------
 * Copyright (C) 2010 William Ahern
 * Copyright (C) 2013 Salvatore Sanfilippo
 * Copyright (C) 2013 Stam He
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to permit
 * persons to whom the Software is furnished to do so, subject to the
 * following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
 * USE OR OTHER DEALINGS IN THE SOFTWARE.
 * ==========================================================================
 */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
 
#include <stddef.h>  /* NULL size_t */
#include <stdarg.h>  /* va_list va_start va_end */
#include <stdlib.h>  /* malloc(3) setenv(3) clearenv(3) setproctitle(3) getprogname(3) */
#include <stdio.h>  /* vsnprintf(3) snprintf(3) */
#include <string.h>  /* strlen(3) strchr(3) strdup(3) memset(3) memcpy(3) */
#include <errno.h>  /* errno program_invocation_name program_invocation_short_name */
#if !defined(HAVE_SETPROCTITLE)
#define HAVE_SETPROCTITLE (defined __NetBSD__ || defined __FreeBSD__ || defined __OpenBSD__)
#endif
#if !HAVE_SETPROCTITLE
#if (defined __linux || defined __APPLE__)
extern char **environ;
static struct {
  /* original value */
  const char *arg0;
  /* title space available */
  char *base, *end;
   /* pointer to original nul character within base */
  char *nul;
  _Bool reset;
  int error;
} SPT;
#ifndef SPT_MIN
#define SPT_MIN(a, b) (((a) < (b))? (a) : (b))
#endif
static inline size_t spt_min(size_t a, size_t b);
static int spt_clearenv(void);
static int spt_copyenv(char *oldenv[]);
static int spt_copyargs(int argc, char *argv[]) ;
void spt_init(int argc, char *argv[]);
void setproctitle(const char *fmt, ...);
static inline size_t spt_min(size_t a, size_t b) {
  return SPT_MIN(a, b);
} /* spt_min() */
/*
 * For discussion on the portability of the various methods, see
 * http://lists.freebsd.org/pipermail/freebsd-stable/2008-June/043136.html
 */
static int spt_clearenv(void) {
#if __GLIBC__
  clearenv();
  return 0;
#else
  extern char **environ;
  static char **tmp;
  if (!(tmp = malloc(sizeof *tmp)))
    return errno;
  tmp[0] = NULL;
  environ = tmp;
  return 0;
#endif
} /* spt_clearenv() */
static int spt_copyenv(char *oldenv[]) {
  extern char **environ;
  char *eq;
  int i, error;
  if (environ != oldenv)
    return 0;
  if ((error = spt_clearenv()))
    goto error;
  for (i = 0; oldenv[i]; i++) {
    if (!(eq = strchr(oldenv[i], '=')))
      continue;
    *eq = '\0';
    error = (0 != setenv(oldenv[i], eq + 1, 1))? errno : 0;
    *eq = '=';
    if (error)
      goto error;
  }
  return 0;
error:
  environ = oldenv;
  return error;
} /* spt_copyenv() */
static int spt_copyargs(int argc, char *argv[]) {
  char *tmp;
  int i;
  for (i = 1; i < argc || (i >= argc && argv[i]); i++) {
    if (!argv[i])
      continue;
    if (!(tmp = strdup(argv[i])))
      return errno;
    argv[i] = tmp;
  }
  return 0;
} /* spt_copyargs() */
void spt_init(int argc, char *argv[]) {
    char **envp = environ;
  char *base, *end, *nul, *tmp;
  int i, error;
  if (!(base = argv[0]))
    return;
  nul = &base[strlen(base)];
  end = nul + 1;
  for (i = 0; i < argc || (i >= argc && argv[i]); i++) {
    if (!argv[i] || argv[i] < end)
      continue;
    end = argv[i] + strlen(argv[i]) + 1;
  }
  for (i = 0; envp[i]; i++) {
    if (envp[i] < end)
      continue;
    end = envp[i] + strlen(envp[i]) + 1;
  }
  if (!(SPT.arg0 = strdup(argv[0])))
    goto syerr;
  if ((error = spt_copyenv(envp)))
    goto error;
  if ((error = spt_copyargs(argc, argv)))
    goto error;
  SPT.nul = nul;
  SPT.base = base;
  SPT.end = end;
  return;
syerr:
  error = errno;
error:
  SPT.error = error;
} /* spt_init() */
#ifndef SPT_MAXTITLE
#define SPT_MAXTITLE 255
#endif
void setproctitle(const char *fmt, ...) {
  char buf[SPT_MAXTITLE + 1]; /* use buffer in case argv[0] is passed */
  va_list ap;
  char *nul;
  int len, error;
  if (!SPT.base)
    return;
  if (fmt) {
    va_start(ap, fmt);
    len = vsnprintf(buf, sizeof buf, fmt, ap);
    va_end(ap);
  } else {
    len = snprintf(buf, sizeof buf, "%s", SPT.arg0);
  }
  if (len <= 0)
    { error = errno; goto error; }
  if (!SPT.reset) {
    memset(SPT.base, 0, SPT.end - SPT.base);
    SPT.reset = 1;
  } else {
    memset(SPT.base, 0, spt_min(sizeof buf, SPT.end - SPT.base));
  }
  len = spt_min(len, spt_min(sizeof buf, SPT.end - SPT.base) - 1);
  memcpy(SPT.base, buf, len);
  nul = &SPT.base[len];
  if (nul < SPT.nul) {
    *SPT.nul = '.';
  } else if (nul == SPT.nul && &nul[1] < SPT.end) {
    *SPT.nul = ' ';
    *++nul = '\0';
  }
  return;
error:
  SPT.error = error;
} /* setproctitle() */
#endif /* __linux || __APPLE__ */
#endif /* !HAVE_SETPROCTITLE */

希望本文所述對大家的C語言程序設(shè)計有所幫助。

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現(xiàn)電腦關(guān)機(jī)程序

    C語言實現(xiàn)電腦關(guān)機(jī)程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)電腦關(guān)機(jī)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進(jìn)行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當(dāng)程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
主站蜘蛛池模板: 五月天婷婷精品免费视频 | 亚州免费一级毛片 | gay男强壮军人chinese | 搓光美女衣 | 无限好资源第一片免费韩国 | 修修视频在线观看 | 国产综合欧美日韩视频一区 | 日本国产高清色www视频在线 | 日本免费不卡在线一区二区三区 | 欧美一区二区三区免费看 | 欧美三级不卡在线观线看高清 | 欧美gayxxxx| 国产成+人+综合+欧美 亚洲 | 午夜在线观看免费完整直播网 | 久久电影院久久国产 | 国产精品一区三区 | 78成人网 | 国产日产国无高清码2020 | 九九精品影院 | 欧美日韩国产成人精品 | 闺蜜调教我做她的脚奴 | 丝瓜草莓香蕉绿巨人幸福宝 | 好吊妞乱淫 | 国产激情在线 | 欧美一级xxxx俄罗斯一级 | 明星乱亚洲 | 亚洲国产区中文在线观看 | 亚洲国产高清一区二区三区 | 国内免费高清视频在线观看 | 四虎影院4hu | 紧身牛仔裤美女被啪啪久久网 | 二次元美女内裤凹陷太深 | 亚洲乱亚洲乱妇41p 亚洲乱码一区二区三区国产精品 | 成人涩涩屋福利视频 | 国产精品视频免费一区二区三区 | 91看片淫黄大片欧美看国产片 | 91porny紧身翘臀 | 国产精品视频在这里有精品 | 热久久最新网址 | 九九国产在线观看 | acg火影忍者熟密姬纲手h |