ZSH で起動したプロセスの PID を表示する

ZSH で起動したプロセスの PID を表示する

起動したプロセスの PID を、できればコマンド行の最後に表示できますか?

Example:
root in ~: mysqld .................. [PID 34567]
12121 mysql-logs start to come in...
12125 more logs...

たとえば、2 つのmysqldプロセスを起動し、2 番目のプロセスが「動作しない」(ポートなど) 場合、どのデーモンにどの PID があるかがわかりません。

具体的な例:

mysqld >/dev/null                                                                                                                                     130 ↵
120126 15:44:05 [Note] Plugin 'FEDERATED' is disabled.
120126 15:44:05 InnoDB: The InnoDB memory heap is disabled
120126 15:44:05 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120126 15:44:05 InnoDB: Compressed tables use zlib 1.2.3
120126 15:44:05 InnoDB: Initializing buffer pool, size = 128.0M
120126 15:44:05 InnoDB: Completed initialization of buffer pool
InnoDB: Unable to lock ./ibdata1, error: 35
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
120126 15:44:05  InnoDB: Retrying to lock the first data file
InnoDB: Unable to lock ./ibdata1, error: 35
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 35
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 35
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 35

プロセスに対して ^+C、^+D、^+Z のいずれも使用できず、これがどのプロセスであるかを調べる唯一の方法は top を使用することです (すでに述べたとおり)。プロセスをバックグラウンドに置くことさえできないため、PID を直接取得する方法はありません。mysqld && echo $! を実行すると、$! が 0 であることが示されます。

プロセスが起動され、実際の出力が開始されるとすぐに PID が表示されるようにしたいと思います。

答え1

前回のコメントを読んで、ターミナルで確認しているプロセスの PID を知りたいということを理解しました。私たちも同じようなニーズを持っています。
私は通常、次のようにします。

端末を2つ開きます。

最初の出力を読み取りますmysqld:

touch   mysql.log
tail -f mysql.log

2 番目はmysqldバックグラウンドで実行します:

mysqld >mysql.log 2>&1 &
ps f

この 2 番目の端末を使用して制御/スパイしますmysqld

これが役に立つことを願っています。
乾杯。

答え2

次のようにして、バックグラウンドでプロセスを開始できます。

mysqld &

通常は [pid] が表示されます。表示されない場合は、次のようにエコーします。

mysqld & echo pid=$!

デーモンをフォアグラウンドで実行したい場合は、フォアグラウンドに戻すだけです。

mysqld & echo pid=$! ; fg

関連情報