linux進程輸出
㈠ linux 標准輸入輸出、重定向、管道、文件許可權、後台啟動進程命令-
IO 重定向是為了改變默握做握認輸入、輸出的位置,如默認情況下標准輸出(STDOUT),標准錯誤輸出(STDERR)都是輸出到顯示終端,如段慶對標准輸出、標准錯誤輸出改變其默認輸出位置,可重定向輸出到指定的文件中(實際工作中經常這么使用),要重定向就要配合一些語法符號。
文件或目錄的胡滾訪問許可權分為只讀、只寫、可執行三種。
修改文件許可權命令:chmod、chgrp、chown。
搞懂「文件所屬者更改及許可權的賦予」,涉及關於 chown、chmod、chgrp 命令,結合用例零基礎理解和掌握使用。
㈡ Linux寫一個shell腳本,要實現在鍵盤輸入一個進程號,輸出這個進程號的子進程pid,怎麼寫
這個只能找出子進程:
read-p"碼如請輸入一個進程號:"value
wym=`ps-ef|sed-e's/[ ][ ]*/|/g'|cut-d"|"-f"2-4"|grep"|${value}|"|cut遲碼啟-d"|"-f"1"`
echo"它的子進程:"
echo"$wym"
這個可以找出所有的後代進程:通過遞歸調用本身函數。
read-p"輸入模渣一個進程號:"p
functionmj(){
pid=`ps-ef|sed's/*/|/g'|cut-d"|"-f2-3|grep"|$1$"`
forppidin$pid;do
num=`echo"$ppid"|sed"s/|$1//g"`
echo"$num"
mj$num
done
}
mj$p
㈢ linux關於子進程的創建,先讓子進程輸出當前所在位置,再讓父進程在當前目錄下新建一個名為hise的文件夾
#include<stdio.h>
#include<stdlib.h>
#include<備殲unistd.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/wait.h>
intmain(intargc,char*argv[]){
intfd[2];
pid_tpid;
if(pipe(fd)<0){
perror("pipe");
exit(1);
}
if((pid=fork())<0){
perror("fork");
exit(2);
}elseif(pid==0){
close(fd[0]);
charpath1[1024]={0};
getcwd(path1,sizeof(path1));
printf("childpath1====%s ",path1);
write(fd[1],path1,strlen(path1));
printf("childPID=%d,parentPID=%d ",getpid(),getppid());
sleep(3);
}else{
charpath2[1024]={0};
charbuf[1024];
close(fd[1]);
intflg=fcntl(fd[0],F_GETFL);
flg|=O_NONBLOCK;
fcntl(fd[0],F_SETFL);
read(fd[0],buf,sizeof(buf));
printf("parentbuf=%s ",buf);
umask(0000);
if(mkdir("hise",0755)){
perror("mkdir");
exit(1);
}
chdir("hise");
intfd_file=open("./01.c",O_RDONLY);
int兆岩fd_file2=open("./cp01.c"仿猜沖,O_WRONLY|O_CREAT,0644);
intbuf2[1024];
memset(buf2,0,1024);
while(read(fd_file,buf2,sizeof(buf2)-1)>0){
write(fd_file2,buf2,strlen(buf2));
}
wait(NULL);
sleep(3);
}
return0;
}
㈣ linux中怎麼使後台進程的輸出至控制終端
linux進程組會話控制終端一個進程可以通過fork()調用創建子進程,這些進程就可以構成一個進程組。 進程組--------------------------------------------- 進程組是一個或多個進程的集合。每個進程組有一個稱為組長的進程,組長進程就是其進程號(pid)等於進程組號(gid)的進程(即進程組號等於組長的進程號)。進程組的概念有很多用途,最常見的是我們在終端上向前台執行程序發出終止信號(Ctrl-C),同時終止整個進程組的所有進程。 (1). Shell上的一條命令行形成一個進程組 (2). 每個進程屬於一個進程組 (3). 每個進程組有一個領頭進程(組長) (4). 進程組的生命周期到組中最後一個進程終止, 或加入其他進程組為止 (5). getpgrp: 獲得進程組id, 即領頭進程的pid (6). 前台進程組和後台進程組 (7). 進程A(假設該進程為組長)和其子進程B屬於同一進程組,它們的進程組號(task_struct.gid)都為進程A的進程號(A.pid)會話 --------------------------------------------- 會話期(Session,或者稱為會話)則是一個或多個進程組的集合。通常情況下,用戶登錄後所執行的所有程序都屬於一個會話期,而其登錄shell則是會話期首進程(Session leader),並且它所使用的中斷就是會話期的控制終端(Controlling Terminal),因此會話期的首進程通常也被稱為控制進程(Controlling process)。當我們退出登錄(logout)時,所有屬於這個會話期的進程都將被終止。 (1). 一次登錄形成一個會話 (2). 一個會話可包含多個進程組, 但只能有一個前台進程組. (3). setsid()可建立一個新的會話;如果調用該函數的進程不是進程組的領頭進程, 該函數才能建立新的會話.調用setsid()之後, 調用進程將成為新會話的領頭進程.控制終端--------------------------------------------- (1) 會話的領頭進程打開一個終端之後, 該終端就成為該會話的控制終端 (SVR4/linux) (2) 與控制終端建立連接的會話領頭進程稱為控制進程 (session leader) (3) 一個會話只能有一個控制終端 (4) 產生在控制終端上的輸入和信號將發送給會話的前台進程組中的所有進程 (5) 終端上的連接斷開時(比如網路斷開或Modem斷開), 掛起信號將發送到控制進程(session leader)
㈤ 在Linux系統中,採用什麼命令查看進程輸出的信息
輸入下面的ps命令,顯示所有運行中的進程:談姿
# ps aux | less
其中,
-A:顯示所有進程
a:顯示終端中包括其它罩昌用戶的所有進程
x:顯示無控物侍扒制終端的進程
㈥ 請教一個linux進程輸出重定向問題
fork的時候,子進程默認會共乎蔽享打開的文件的,標准輸出這些應該也態培會共享。 但你也可以用p調用重定向 標准輸出啊,看你具體代碼怎麼寫了帆頃唯。、 一般後台的進程,喜歡把他定向到管道或者其他無用的設備文件裡面去。
㈦ 在Linux系統中,採用什麼命令查看進程輸出的信息
下面三條命令都可以用來查看進程:
ps
-la
是十分常用的,l參數用於顯示進程的詳細信息,a參數用於顯示所有的進程。可以配合grep命令來查找特定的進程
top
能夠顯示cpu和內存的佔用率,用於動態監視高資源佔用
pstree
用來查看進程的父子關系
㈧ 創建一個子進程打開你的linux系統中的瀏覽器,子進程結束後輸出子進程
#include
#include
#include
#define
BUFSIZE
10
int
main(void)
{
char
ch,dh,eh;
int
p[2];//文件描述符
pid_t
childpid;
if(pipe(p)
==
-1)//創建管道
{
perror("pipe
call");
return
-1;
}
if((childpid
=
fork())
==
-1)//創建子進程
{
perror("fork
call");
return
-1;
}
if(childpid!=0)//父進程
{
close(p[0]);//關閉讀文件
do
{
ch
=
getchar();
write(p[1],&ch,1);//向管道寫
}while(ch!='x');//遇到'x'則結束
}
else
if(childpid==0)//子進程
{
close(p[1]);//關閉寫文件
while(1)
{
read(p[0],&dh,1);//從管道讀
if(dh
==
'x')
{
printf("\n");
return
0;
}
else
if(dh>='a'&&dh<='z')
{
eh
=
(char)((int)dh
-
32);//轉化成大寫輸出
printf("%c",eh);
}
else
{
printf("%c",dh);
}
}
}
}
㈨ linux守護進程的輸出問題
你好,看了你的代碼,我猜測你也做了不少努力,搜索了不少資料。
為了解決你的問題,我也這樣做了。
我把我修改後的代碼昌納,和參考的文檔放在附件里。
你代碼褲答有3個關鍵錯誤:
獲取系統時間,應當放在while中,否則,你的鬧鍾「停擺」。
while這個大循環應該在daemon中,而不是主函數中。
因為init_daemon函數執行後,父進程會退出胡迅慧,主函數的部分代碼就不會執行,而while在主函數中。
close(i); 你調用循環把所有文件句柄都關閉了,導致不能寫文件。