@@ -95,33 +95,74 @@ func (c *processComm) closeParent() {
95
95
// c.logPipeParent is kept alive for ForwardLogs
96
96
}
97
97
98
- type setnsProcess struct {
99
- cmd * exec.Cmd
100
- comm * processComm
101
- cgroupPaths map [string ]string
102
- rootlessCgroups bool
103
- manager cgroups.Manager
104
- intelRdtPath string
105
- config * initConfig
106
- fds []string
107
- process * Process
108
- bootstrapData io.Reader
109
- initProcessPid int
98
+ type containerProcess struct {
99
+ cmd * exec.Cmd
100
+ comm * processComm
101
+ config * initConfig
102
+ manager cgroups.Manager
103
+ fds []string
104
+ process * Process
105
+ bootstrapData io.Reader
106
+ container * Container
107
+ }
108
+
109
+ func (p * containerProcess ) pid () int {
110
+ return p .cmd .Process .Pid
110
111
}
111
112
112
- func (p * setnsProcess ) startTime () (uint64 , error ) {
113
+ func (p * containerProcess ) startTime () (uint64 , error ) {
113
114
stat , err := system .Stat (p .pid ())
114
115
return stat .StartTime , err
115
116
}
116
117
117
- func (p * setnsProcess ) signal (sig os.Signal ) error {
118
+ func (p * containerProcess ) signal (sig os.Signal ) error {
118
119
s , ok := sig .(unix.Signal )
119
120
if ! ok {
120
121
return errors .New ("os: unsupported signal type" )
121
122
}
122
123
return unix .Kill (p .pid (), s )
123
124
}
124
125
126
+ func (p * containerProcess ) externalDescriptors () []string {
127
+ return p .fds
128
+ }
129
+
130
+ func (p * containerProcess ) setExternalDescriptors (newFds []string ) {
131
+ p .fds = newFds
132
+ }
133
+
134
+ func (p * containerProcess ) forwardChildLogs () chan error {
135
+ return logs .ForwardLogs (p .comm .logPipeParent )
136
+ }
137
+
138
+ // terminate sends a SIGKILL to the forked process for the setns routine then waits to
139
+ // avoid the process becoming a zombie.
140
+ func (p * containerProcess ) terminate () error {
141
+ if p .cmd .Process == nil {
142
+ return nil
143
+ }
144
+ err := p .cmd .Process .Kill ()
145
+ if _ , werr := p .wait (); err == nil {
146
+ err = werr
147
+ }
148
+ return err
149
+ }
150
+
151
+ func (p * containerProcess ) wait () (* os.ProcessState , error ) { //nolint:unparam
152
+ err := p .cmd .Wait ()
153
+
154
+ // Return actual ProcessState even on Wait error
155
+ return p .cmd .ProcessState , err
156
+ }
157
+
158
+ type setnsProcess struct {
159
+ containerProcess
160
+ cgroupPaths map [string ]string
161
+ rootlessCgroups bool
162
+ intelRdtPath string
163
+ initProcessPid int
164
+ }
165
+
125
166
func (p * setnsProcess ) start () (retErr error ) {
126
167
defer p .comm .closeParent ()
127
168
@@ -318,60 +359,9 @@ func (p *setnsProcess) execSetns() error {
318
359
return nil
319
360
}
320
361
321
- // terminate sends a SIGKILL to the forked process for the setns routine then waits to
322
- // avoid the process becoming a zombie.
323
- func (p * setnsProcess ) terminate () error {
324
- if p .cmd .Process == nil {
325
- return nil
326
- }
327
- err := p .cmd .Process .Kill ()
328
- if _ , werr := p .wait (); err == nil {
329
- err = werr
330
- }
331
- return err
332
- }
333
-
334
- func (p * setnsProcess ) wait () (* os.ProcessState , error ) {
335
- err := p .cmd .Wait ()
336
-
337
- // Return actual ProcessState even on Wait error
338
- return p .cmd .ProcessState , err
339
- }
340
-
341
- func (p * setnsProcess ) pid () int {
342
- return p .cmd .Process .Pid
343
- }
344
-
345
- func (p * setnsProcess ) externalDescriptors () []string {
346
- return p .fds
347
- }
348
-
349
- func (p * setnsProcess ) setExternalDescriptors (newFds []string ) {
350
- p .fds = newFds
351
- }
352
-
353
- func (p * setnsProcess ) forwardChildLogs () chan error {
354
- return logs .ForwardLogs (p .comm .logPipeParent )
355
- }
356
-
357
362
type initProcess struct {
358
- cmd * exec.Cmd
359
- comm * processComm
360
- config * initConfig
361
- manager cgroups.Manager
363
+ containerProcess
362
364
intelRdtManager * intelrdt.Manager
363
- container * Container
364
- fds []string
365
- process * Process
366
- bootstrapData io.Reader
367
- }
368
-
369
- func (p * initProcess ) pid () int {
370
- return p .cmd .Process .Pid
371
- }
372
-
373
- func (p * initProcess ) externalDescriptors () []string {
374
- return p .fds
375
365
}
376
366
377
367
// getChildPid receives the final child's pid over the provided pipe.
@@ -789,27 +779,6 @@ func (p *initProcess) start() (retErr error) {
789
779
return nil
790
780
}
791
781
792
- func (p * initProcess ) wait () (* os.ProcessState , error ) {
793
- err := p .cmd .Wait ()
794
- return p .cmd .ProcessState , err
795
- }
796
-
797
- func (p * initProcess ) terminate () error {
798
- if p .cmd .Process == nil {
799
- return nil
800
- }
801
- err := p .cmd .Process .Kill ()
802
- if _ , werr := p .wait (); err == nil {
803
- err = werr
804
- }
805
- return err
806
- }
807
-
808
- func (p * initProcess ) startTime () (uint64 , error ) {
809
- stat , err := system .Stat (p .pid ())
810
- return stat .StartTime , err
811
- }
812
-
813
782
func (p * initProcess ) updateSpecState () error {
814
783
s , err := p .container .currentOCIState ()
815
784
if err != nil {
@@ -837,22 +806,6 @@ func (p *initProcess) createNetworkInterfaces() error {
837
806
return nil
838
807
}
839
808
840
- func (p * initProcess ) signal (sig os.Signal ) error {
841
- s , ok := sig .(unix.Signal )
842
- if ! ok {
843
- return errors .New ("os: unsupported signal type" )
844
- }
845
- return unix .Kill (p .pid (), s )
846
- }
847
-
848
- func (p * initProcess ) setExternalDescriptors (newFds []string ) {
849
- p .fds = newFds
850
- }
851
-
852
- func (p * initProcess ) forwardChildLogs () chan error {
853
- return logs .ForwardLogs (p .comm .logPipeParent )
854
- }
855
-
856
809
func pidGetFd (pid , srcFd int ) (* os.File , error ) {
857
810
pidFd , err := unix .PidfdOpen (pid , 0 )
858
811
if err != nil {
0 commit comments