많은 연결이있는 곳에 클라이언트 코드를 작성했습니다. 각 노드는 동일한 시스템에서 다른 프로세스를 나타냅니다. 그리고 그것을하기 위해 나는 분명히 fork()를 사용했다.리눅스에서 C 프로그램을 통해 새 터미널을 여는 방법
하지만 이제는 모든 결과가 동일한 터미널에 표시됩니다. 각 방법을 알고 싶습니다. 각 fork()
또는 프로세스 생성 새 터미널이 열리면 특정 터미널에서 해당 프로세스에 대한 모든 결과가 표시됩니다.
P.S : system("gnome-terminal")
을 시도했지만 새로운 터미널을 열었지만 모든 결과가 동일한 터미널에만 다시 표시됩니다. 모든 새 터미널이 열리고 아무 결과도없이 공란으로 남습니다.
또한이 링크 How to invoke another terminal for output programmatically in C in Linux을 통과했지만 매개 변수 등으로 프로그램을 실행하고 싶지 않습니다. 그것은 ./test
여기 내 코드처럼해야한다 : -
for(int i=0;i<node-1;i++)
{
n_number++;
usleep(5000);
child_pid[i]=fork();
if(!child_pid[i])
{
system("gnome-terminal");
file_scan();
connection();
exit(0);
}
if(child_pid[i]<0)
printf("Error Process %d cannot be created",i);
}
for(int i=0;i<node-1;i++)
wait(&status);
그래서 기본적으로 각 프로세스에 대해 무엇을 내가 원하는 해당 프로세스 정보 나 결과를 표시하는 새 터미널이 있어야합니다.
내가 정확히 원하는 것은 : 포크 후
- 은() 내가 처리 한 후 나는 같은
- 각 프로세스로가는 하나 개의 단자로 출력을 원하는 말을 관련 일부 데이터가 있습니다. 그래서 마치 3 개의 프로세스가 있다면 3 개의 터미널이 있어야하며 각 프로세스는 관련된 데이터 만 표시해야합니다.
IPC (Inter Process Communication)를 사용하여 수행 할 수 있지만 다른 방법이 있습니까? 나는 단지 2-3 명령 정도를 의미합니까? 왜냐하면이 부분을 코딩하는 데 너무 많은 투자를하고 싶지 않기 때문입니다.
미리 감사드립니다.
어떻게 원래 프로세스가 터미널에 쓰기를 준비합니까? 새로운 단말기의 어떤 프로세스가 귀하가 작성한 정보를 표시합니까? –
@JonathanLeffler 파일 설명자와 스트림을 더 기억하고 싶지만 이론적으로 새 터미널을 열고 해당 터미널에 대한 파일 설명자에 'stdout'을 리디렉션 할 수 없습니까? 흠 나는 내가 터미널을 오해하고 있다고 생각한다. – rliu
나의 부재/기대는 그 밖의 것이 없다면, 터미널은 그 자신의 셸과 그 자신의 (깜짝) 터미널 ('/ dev/ttyXXX' 또는 '/ dev/ptyXXX'). 그래서,주의 깊게 배관하는 것이 필요하기 때문에, 터미널 창 입력은 여러분의 프로세스에서 쓰고 싶어합니다. 프로그램을 (아마도'cat'?) 입력해야합니다. 터미널 창. 나는 그것을하지 않았으므로 트릭이 무엇인지 알지 못합니다. ('man gnome-terminal'을 시도해 보셨습니까?) –