. 應用場景

我們提供的服務有:網站設計、成都網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、渭源ssl等。為上千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的渭源網站制作公司
2. 通過Linux prctl修改進程名
3. 通過修改進程argv[0]修改進程名
4. 通過bash exec命令修改一個進程的cmdline信息
1. 應用場景
1. 標識父子進程名稱,防止被誤殺
2. 構造假的進程名及參數(shù),引導非法進入人員到蜜罐系統(tǒng),取證
3. 惡意程序、木馬會通過"檫除"自己的進程名,使ps的時候顯示的是一個無名字的進程,同時刪除進程對應磁盤上的文件
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中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)