Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfce117d

Browse files
committed
Grab ssh stderr
1 parent64510a4 commitfce117d

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

‎src/utils/remote.c

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#defineMAX_CMDLINE_LENGTH 4096
1212
#defineMAX_CMDLINE_OPTIONS 256
13+
#defineERR_BUF_SIZE 1024
1314

1415
staticintappend_option(char*buf,size_tbuf_size,size_tdst,charconst*src)
1516
{
@@ -78,6 +79,7 @@ int remote_execute(int argc, char* argv[], bool listen)
7879
inti;
7980
intoutfd[2];
8081
intinfd[2];
82+
interrfd[2];
8183
char*pg_probackup=argv[0];
8284

8385
ssh_argc=0;
@@ -116,31 +118,45 @@ int remote_execute(int argc, char* argv[], bool listen)
116118

117119
SYS_CHECK(pipe(infd));
118120
SYS_CHECK(pipe(outfd));
121+
SYS_CHECK(pipe(errfd));
119122

120123
SYS_CHECK(child_pid=fork());
121124

122125
if (child_pid==0) {/* child */
123126
SYS_CHECK(close(STDIN_FILENO));
124127
SYS_CHECK(close(STDOUT_FILENO));
128+
SYS_CHECK(close(STDERR_FILENO));
125129

126130
SYS_CHECK(dup2(outfd[0],STDIN_FILENO));
127-
SYS_CHECK(dup2(infd[1],STDOUT_FILENO));
131+
SYS_CHECK(dup2(infd[1],STDOUT_FILENO));
132+
SYS_CHECK(dup2(errfd[1],STDERR_FILENO));
128133

129134
SYS_CHECK(close(infd[0]));
130135
SYS_CHECK(close(infd[1]));
131136
SYS_CHECK(close(outfd[0]));
132137
SYS_CHECK(close(outfd[1]));
138+
SYS_CHECK(close(errfd[0]));
139+
SYS_CHECK(close(errfd[1]));
133140

134141
SYS_CHECK(execvp(ssh_argv[0],ssh_argv));
135142
return-1;
136143
}else {
137-
SYS_CHECK(close(outfd[0]));/* These are being used by the child */
138-
SYS_CHECK(close(infd[1]));
144+
SYS_CHECK(close(infd[1]));/* These are being used by the child */
145+
SYS_CHECK(close(outfd[0]));
146+
SYS_CHECK(close(errfd[1]));
139147
atexit(kill_child);
140148
if (listen) {
141149
intstatus;
142150
fio_communicate(infd[0],outfd[1]);
143151
SYS_CHECK(wait(&status));
152+
if (status!=0)
153+
{
154+
charbuf[ERR_BUF_SIZE];
155+
intoffs,rc;
156+
for (offs=0; (rc=read(errfd[0],&buf[offs],sizeof(buf)-offs))>0;offs+=rc);
157+
buf[offs]='\0';
158+
elog(ERROR,buf);
159+
}
144160
returnstatus;
145161
}else {
146162
fio_redirect(infd[0],outfd[1]);/* write to stdout */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp