GNU/Linux >> Linux の 問題 >  >> Linux

ポート 3000 で実行されているプロセスの PID のみを追加情報なしで取得するにはどうすればよいですか?

別の可能な解決策:

lsof -t -i :<port> -s <PROTO>:LISTEN

例:

# lsof -i :22 -s TCP:LISTEN
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1392 root    3u  IPv4  19944      0t0  TCP *:ssh (LISTEN)
sshd    1392 root    4u  IPv6  19946      0t0  TCP *:ssh (LISTEN)
# lsof -t -i :22 -s TCP:LISTEN
1392

これを試してください:

pid=$(fuser 3000/tcp 2>/dev/null)

(psmisc が必要です パッケージ)

これは、ユーザー root によって実行された場合にのみ信頼できることに注意してください。他のユーザーは、同じユーザーで実行されているプロセスを見つけることしか期待できません。

root のみのアクセスの退屈な説明は、こちらの例を使用してください。
使用されたメソッド (fuser、ss、lsof、...) に関係なく、それらはすべて、プロセスの記述子の利用可能なリストをネットワーク接続の利用可能なリストに一致させます (たとえば、tcp の場合、/proc/net/tcp で利用可能です)。 )。
たとえば、ポート 22/tcp を使用して pid を取得しようとすると、 (with 22 =0x0016) は、次のような比較を行うことになります:

/proc/net/tcpからエントリー :
0: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 141408 1 000000000a9ac1b5 100 0 0 10 0

と:
dr-x------. 2 root root 0 May 14 17:59 /proc/358/fd lrwx------. 1 root root 64 May 14 17:59 /proc/358/fd/3 -> socket:[141408]

この fd 記述子はそのユーザー (この例ではたまたま root) または root のみが使用できるため、そのユーザーまたは root のみが pid が 358 であることを知ることができます。


lsof の間 の -t PID lsof を取得する最も簡単な方法です。 -F を使用して他のフィールドを選択する方法もあります オプション:

$ lsof -F'?'
lsof:   ID    field description
     a    access: r = read; w = write; u = read/write
     c    command name
     d    device character code
     D    major/minor device number as 0x<hex>
     f    file descriptor (always selected)
     G    file flaGs
     i    inode number
     k    link count
     K    task ID (TID)
     l    lock: r/R = read; w/W = write; u = read/write
     L    login name
     m    marker between repeated output
     n    comment, name, Internet addresses
     o    file offset as 0t<dec> or 0x<hex>
     p    process ID (PID)
     g    process group ID (PGID)
     P    protocol name
     r    raw device number as 0x<hex>
     R    paRent PID
     s    file size
     S    stream module and device names
     t    file type
     T    TCP/TPI info
     u    user ID (UID)
     0    (zero) use NUL field terminator instead of NL

次のように出力します (PID とファイル記述子は常に出力されることに注意してください):

$ sudo lsof -F cg -i :22 -s TCP:LISTEN 
p901
g901
csshd
f3
f4

したがって、PID ではなくプロセス グループ ID が必要な場合は、次のようにすることができます。

$ sudo lsof -F g -i :22 -s TCP:LISTEN | awk '/^g/{print substr($0, 2)}'
901

Linux
  1. Bashが実行されているTtyを取得する方法は?

  2. 実行中のターミナルプログラムのプロセスID(pid)を見つける方法は?

  3. Linuxの特定のポートで実行されているプロセスを強制終了する方法は?

  1. SSHで実行中のユーザーのプロセスを表示するにはどうすればよいですか?

  2. Unix / Linux でプロセスのパスを取得するにはどうすればよいですか

  3. UNIX/Linux システムで実行中のプロセスにコマンドライン引数を渡す方法は?

  1. nohupプロセスを強制終了するプロセスIDを取得するには?

  2. ファイルの行数だけを取得する方法

  3. プロセス名でPIDを取得するには?