欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Linux修改進程命令,Linux進程命令

如何修改 Linux 中的進程名

. 應用場景

我們提供的服務有:網站設計、成都網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、渭源ssl等。為上千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的渭源網站制作公司

2. 通過Linux prctl修改進程名

3. 通過修改進程argv[0]修改進程名

4. 通過bash exec命令修改一個進程的cmdline信息

1. 應用場景

1. 標識父子進程名稱,防止被誤殺

2. 構造假的進程名及參數(shù),引導非法進入人員到蜜罐系統(tǒng),取證

3. 惡意程序、木馬會通過"檫除"自己的進程名,使ps的時候顯示的是一個無名字的進程,同時刪除進程對應磁盤上的文件

Linux進程詳解

ps是Linux 中最基礎的瀏覽系統(tǒng)中的進程的命令。能列出系統(tǒng)中運行的進程,包括進程號、命令、CPU使用量、內存使用量等。接下來解讀一下Linux操作系統(tǒng)的進程和Windows「Ctrl+Alt+delete」直接的差異。

在進行了解進程命令之前需要知道進程的一些狀態(tài)

ps工具標識進程的5種狀態(tài)碼:

Linux操作系統(tǒng)進程執(zhí)行的狀態(tài)轉換圖如圖所示:

下面來看一下 ps命令

ps --help命令可以查看ps命令的使用說明

或者使用 man ps命令 查詢ps的詳細說明

在 man手冊 關于ps的解讀中,總結了一下幾個參數(shù)的含義:

以上的參數(shù)是可以拼接使用的,那就了解一些常用的參數(shù)組合

ps aux命令

ps -ef命令

查看進程狀態(tài)這兩個是命令是最常用的,使用 ps aux 可以查看進程的詳細運行狀態(tài)等。使用 ps -ef 不僅可以顯示自身的PID,也可以顯示PPID(父進程)。但是顯示不了進程的運行狀態(tài)

top命令

top命令是Linux下常用的性能分析工具,能夠實時顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務管理器

man手冊關于top的解釋

關閉進程,重啟進程

在上一片文章中 linux的目錄結構 里面說過,在目錄/etc/init.d/目錄下包含許多系統(tǒng)各種服務的啟動和停止腳本。假設進程占用內存較大或者進程異常,我們是重啟這個進程restart。如下圖所示:

我們重啟了mysqld這個進程,可以看出進程號已經改變(從15743到15964),說明進程已經重啟。

Linux下有3個特殊的進程,idle進程(PID=0), init進程(PID=1)和kthreadd(PID=2)

我們來看一下進程狀態(tài)[下面是刪減版,進程數(shù)量太多,列舉一部分]

可以看到很多進程的PPID號是1和2。也就是init進程和kthreadd進程。

在使用Windows系統(tǒng)的過程中,都碰到過應用程序卡死的情況。應對此問題,我們一般都是等待失去響應的程序恢復,或者是直接使用任務管理器將其強制關閉,然后再重新打開。

在Linux中,遇到特別耗費資源的進程,當然需要使用 top命令 查看進程占用率高的進程。或者使用 free -m命令 查看內存剩余。假設需要強殺進程來釋放空間。我們涉及到Linux中信號????的知識,在這里簡單的描述一下,信號的詳解會在接下來的文章里面敘述。

free -m命令查看內存空間

在linux中存在著64種信號

使用 kill -l命令 查看信號列表

在前面說過進程會被這些個信號 (進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號強制停止運行) 那問題就在于如何發(fā)信號給這些個進程。

使用kill命令發(fā)信號

我們從上面可以看到 mysqld進程被重啟了 。

關于Linux的這一塊進程的知識還有很多,后面的文章跟大家分享僵尸進程,孤兒進程等等知識,以及守護進程(daemon進程).

linux修改一下進程

在linux中prctl可以滿足這個要求,下滿是man手冊:

PR_SET_NAME (since Linux 2.6.9)

Set the process name for the calling process, using the value in

the location pointed to by (char *) arg2. The name can be up to

16 bytes long, and should be null terminated if it contains

fewer bytes.

但是prctl修改的進程名,只能是16個字節(jié)(包括'\0')。下面是修改的代碼(changetitle.c):

#include stdio.h

#include sys/prctl.h

int main(int argc, char *argv[], char *envp[])

{

char *new_name = "abcdefghijklmnopqrstuvwxyz";

getchar();

prctl(PR_SET_NAME, new_name);

getchar();

return 0;

}

當新名稱長度大于16時就會截斷,上面的新名字截斷后是abcdefghijklmno。這對于我們來說是有缺陷的。而且通過ps -aux 查看,進程名稱并沒有改變,改變的只是/prco/$(PID)/stat和

/prco/$(PID)/status的值,而/prco/$(PID)/cmdline并沒有改變。這種方式使用起來也是不方便的。

下面介紹另一種方式,可以與上面的方式互補。

首先看一下main函數(shù)的原型:int main(int argc, char *argv[]);

argv[0]存放的是終端執(zhí)行的程序名稱也就是進程名。argv[1...argc-1]存放的是命令行參數(shù)。

linux中main()還有一個隱藏參數(shù)就是環(huán)境變量信息,存放了運行時所需要的環(huán)境變量。

我們可以通過以下來訪問這個變量

extern char **environ;

argv與environ是連續(xù)存放在棧區(qū)的。下面代碼可以查看參數(shù)信息:

#include stdio.h

#include string.h

extern char **environ;

int main(int argc , char *argv[])

{

int i;

printf("argc:%d\n" , argc);

for (i = 0; i argc; ++i)

{

printf("argv[%d](0x%x):%s\n" , i , (unsigned int)argv[i], argv[i]);

}

printf("evriron=0x%x\n" , (unsigned int)environ[0]);

return 0;

}

通過上面可以看出,我們只需要修改argv[0]所指向的內存空間的內容,就可以修改進程名。但是如果新名稱比argv[0]的長度小,我們可以直接修改,并把多余的部分請0,如果新名稱

比argv[0]長我們需要兩步:

1、申請新內存保存環(huán)境變量信息和argv[1...argc-1]參數(shù)信息

2、修改argv[0],將新名稱往后到environ的最后一項清0

以下是參考代碼:

#include unistd.h

#include stdio.h

#include stdarg.h

#include string.h

#include stdlib.h

#include sys/prctl.h

# define MAXLINE 2048

extern char **environ;

static char **g_main_Argv = NULL; /* pointer to argument vector */

static char *g_main_LastArgv = NULL; /* end of argv */

void setproctitle_init(int argc, char **argv, char **envp)

{

int i;

for (i = 0; envp[i] != NULL; i++) // calc envp num

continue;

environ = (char **) malloc(sizeof (char *) * (i + 1)); // malloc envp pointer

for (i = 0; envp[i] != NULL; i++)

{

environ[i] = malloc(sizeof(char) * strlen(envp[i]));

strcpy(environ[i], envp[i]);

}

environ[i] = NULL;

g_main_Argv = argv;

if (i 0)

g_main_LastArgv = envp[i - 1] + strlen(envp[i - 1]);

else

g_main_LastArgv = argv[argc - 1] + strlen(argv[argc - 1]);

}

void setproctitle(const char *fmt, ...)

{

char *p;

int i;

char buf[MAXLINE];

extern char **g_main_Argv;

分享題目:Linux修改進程命令,Linux進程命令
當前URL:http://chinadenli.net/article13/dsesogs.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設網站導航網站改版品牌網站建設網站排名域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站網頁設計