程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java socket 與c socket 通信

java socket 與c socket 通信

編輯:關於JAVA
 

在Unix/Linux中創建一個後台進程的步驟

1、調用fork函數,創建一個子進程。

2、先讓父進程自然結束。

3、在子進程中調用setpgrp(),把子進程的進程組ID設為子進程的進程ID。

4、在子進程中調用setsid(),創建一個新的Session(會話),這樣子進程就與當前的控制終端脫離,也接受不到當前終端的(ctrl + c)消息。


實現代碼如下(運行環境:虛擬機下的Ubuntu):

/*
* Author: ACb0y
* FileName: main.cpp
* Create Time: 2011-07-24
* Version: V1.0
*/
#include <iostream>
#include <unistd.h>
using namespace std;

void print()
{
int pid = getpid();
int gid = getpgid(0);
cout << "process group id = " << gid << endl;
cout << "process id = " << pid << endl;
}

int main()
{
//create a child process.
int pid = fork();
if (-1 == pid)
{
cout << "call function fork() error!" << endl;
}
else if (0 == pid) //return from child process.
{
cout << "----------in child process.----------" << endl;
print();
cout << "--------------------------------------" << endl;
//將該進程的進程組ID設置為該進程的進程ID。
setpgrp();
cout << "----------in child process. setpgrp()----------" << endl;
print();
cout << "--------------------------------------" << endl;
//創建一個新的Session,斷開與控制終端的關聯。也就是說Ctrl+c的觸發的SIGINT信號,該進程接收不到。
setsid();


for (int i = 0; i < 5; ++i)
{
sleep(20);
cout << "----------in child process.----------" << endl;
print();
cout << "--------------------------------------" << endl;
}
}
else //return from parent process.
{
cout << "----------in parent process.----------" << endl;
print();
cout << "--------------------------------------" << endl;
}
return 0;
}

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved