/* * Copyright 2013 Steffen Vogel, Chair for Operating Systems, * RWTH Aachen University * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This file is part of MetalSVM. */ #include #include #include #include #include #include int main(int argc, char** argv) { printf("======== USER: test forking...\n"); int id = fork(); int ret = 0; if (id < 0) { perror(" PARENT: fork"); exit(-1); } else if (id == 0) { printf(" CHILD: This is the child. My pid is %u\n", getpid()); printf(" CHILD: Running memtest...\n"); const char *argv[] = {"/bin/memtest", "512", "kb", "10", NULL}; execve(argv[0], argv, NULL); perror(" CHILD: exec() returned: "); ret = -1; } else { printf(" PARENT: Here is the parent. My pid is %u\n", getpid()); wait(&ret); printf(" PARENT: My child returned with code %i...\n", ret); } return ret; }