2015-12-17 63 views
1

我正在編寫服務器和客戶端套接字程序。如何關閉程序中的gnome終端屏幕C

服務器管理客戶端之間的連接。

當客戶想與另一個聊天我打開使用新的終端屏幕:

   char command[MAXBUFSIZE]; 
       strcpy(command,"gnome-terminal -e './client "); 
       strcat(command,client.url); 
       strcat(command," "); 
       strcat(command,client.port); 
       strcat(command," '"); 
       system(command); 

有沒有辦法從這個塊知道有這個新的終端進程的數量。

因爲我想嘗試這樣的事情: 當客戶想要與另一個朋友聊天時,他會告訴服務器並自動將最後一個關閉的終端告知服務器。

所以我必須在這裏編寫命令,殺死打開最後一個終端聊天屏幕的過程。

+0

這就是爲什麼專業人員不使用'system()'這個用例。 –

+1

我不專業,但我努力成爲。 –

+1

https://en.wikipedia.org/wiki/Fork%E2%80%93exec –

回答

0

有沒有什麼辦法從這個塊裏知道 有這個新終端的進程號。

否;替換爲:

char command[MAXBUFSIZE]; 
    sprintf(command, "./client %s %s", client.url, client.port); 
    pid_t pid = fork(); 
    switch (pid) 
    { int status; 
    case -1: perror("fork"); 
       break; 
    case 0:  execlp("gnome-terminal", "gnome-terminal", "-e", command, NULL); 
       perror("exec"); 
       exit(1); 
    default: // You may kill the new terminal process "pid", as you wish. 
       // wait(&status); if you want to. 
    }