0

ここに私のサーバープログラムがあります

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<sys/types.h>
#include<unistd.h>
int main ()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
unlink("server_socket");
server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);//created socket
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"server_socket");
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);//binded it
listen(server_sockfd,5);
while (1)
        {
 char ch;
 printf("server waiting\n");
 client_len=sizeof(client_address);
 client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
 read(client_sockfd,&ch,1);
 ch++;
 write(client_sockfd,&ch,1);
 close(client_sockfd);

}

}

上記のプログラムを次のようにコンパイルしました

 cc server.c -o server.o

を実行するps -el | grep server.oと、次の出力が得られます

0 S  1000  4450  2228  0  80   0 -   965 skb_re pts/0    00:00:00 server.o

S上記の出力の意味を知りたいですか?

4

2 に答える 2

2

それは「中断可能な睡眠」を意味します。ブロッキング システム コールで待機していることを意味している可能性があります。あなたの場合、そのシステムコールはおそらくacceptまたはreadです。

ps(1)

プロセスの状態を記述するために、s、stat、および状態出力指定子 (ヘッダー「STAT」または「S」) が表示するさまざまな値を次に示します。

   D    Uninterruptible sleep (usually IO)
   R    Running or runnable (on run queue)
   S    Interruptible sleep (waiting for an event to complete)
   T    Stopped, either by a job control signal or because it is being traced.
   W    paging (not valid since the 2.6.xx kernel)
   X    dead (should never be seen)
   Z    Defunct ("zombie") process, terminated but not reaped by its parent.
于 2011-06-29T08:47:13.440 に答える
2
  • S スリープ状態が約 20 秒未満のプロセスをマークします。
  • D ディスク (またはその他の短期間の割り込み不可) 待機中のプロセスをマークします。
  • I アイドル状態 (約 20 秒以上スリープ状態) のプロセスをマークします。
  • L ロックの取得を待機しているプロセスをマークします。
  • R 実行可能なプロセスをマークします。
  • T 停止したプロセスをマークします。
  • W アイドル割り込みスレッドをマークします。
  • Z デッド プロセス (「ゾンビ」) をマークします。

ソース

于 2011-06-29T08:49:24.803 に答える