mirror of
https://github.com/tsl0922/ttyd.git
synced 2025-12-23 12:14:20 +01:00
src: fix exit code check on linux
This commit is contained in:
@@ -133,9 +133,9 @@ tty_client_destroy(struct tty_client *client) {
|
|||||||
lwsl_err("kill: %d, errno: %d (%s)\n", pid, errno, strerror(errno));
|
lwsl_err("kill: %d, errno: %d (%s)\n", pid, errno, strerror(errno));
|
||||||
}
|
}
|
||||||
pid_t pid_out;
|
pid_t pid_out;
|
||||||
int status = wait_proc(client->pid, &pid_out);
|
client->exit_status = wait_proc(client->pid, &pid_out);
|
||||||
if (pid_out > 0) {
|
if (pid_out > 0) {
|
||||||
lwsl_notice("process exited with code %d, pid: %d\n", status, pid_out);
|
lwsl_notice("process exited with code %d, pid: %d\n", client->exit_status, pid_out);
|
||||||
}
|
}
|
||||||
close(client->pty);
|
close(client->pty);
|
||||||
|
|
||||||
@@ -196,7 +196,14 @@ spawn_process(struct tty_client *client) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
tty_client_poll(struct tty_client *client) {
|
tty_client_poll(struct tty_client *client) {
|
||||||
if (!client->running || client->state == STATE_READY) return;
|
if (client->pid <= 0 || client->state == STATE_READY) return;
|
||||||
|
|
||||||
|
if (!client->running) {
|
||||||
|
memset(client->pty_buffer, 0, sizeof(client->pty_buffer));
|
||||||
|
client->pty_len = client->exit_status;
|
||||||
|
client->state = STATE_READY;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fd_set des_set;
|
fd_set des_set;
|
||||||
FD_ZERO (&des_set);
|
FD_ZERO (&des_set);
|
||||||
@@ -372,9 +379,7 @@ callback_tty(struct lws *wsi, enum lws_callback_reasons reason,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (spawn_process(client) != 0) {
|
if (spawn_process(client) != 0) return 1;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lwsl_warn("ignored unknown message type: %c\n", command);
|
lwsl_warn("ignored unknown message type: %c\n", command);
|
||||||
|
|||||||
@@ -186,6 +186,14 @@ sigchld_handler() {
|
|||||||
int status = wait_proc(-1, &pid);
|
int status = wait_proc(-1, &pid);
|
||||||
if (pid > 0) {
|
if (pid > 0) {
|
||||||
lwsl_notice("process exited with code %d, pid: %d\n", status, pid);
|
lwsl_notice("process exited with code %d, pid: %d\n", status, pid);
|
||||||
|
struct tty_client *iterator;
|
||||||
|
LIST_FOREACH(iterator, &server->clients, list) {
|
||||||
|
if (iterator->pid == pid) {
|
||||||
|
iterator->running = false;
|
||||||
|
iterator->exit_status = status;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ struct tty_client {
|
|||||||
|
|
||||||
int pid;
|
int pid;
|
||||||
int pty;
|
int pty;
|
||||||
|
int exit_status;
|
||||||
enum pty_state state;
|
enum pty_state state;
|
||||||
char pty_buffer[LWS_PRE + 1 + BUF_SIZE];
|
char pty_buffer[LWS_PRE + 1 + BUF_SIZE];
|
||||||
ssize_t pty_len;
|
ssize_t pty_len;
|
||||||
|
|||||||
Reference in New Issue
Block a user