小编pcd*_*623的帖子

具体来说,fork()如何处理Linux中malloc()动态分配的内存?

我有一个包含父进程和子进程的程序.在fork()之前,父进程调用malloc()并用一些数据填充数组.在fork()之后,孩子需要那些数据.我知道我可以使用管道,但以下代码似乎有效:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main( int argc, char *argv[] ) {
    char *array;
    array = malloc( 20 );
    strcpy( array, "Hello" );
    switch( fork() ) {
    case 0:
        printf( "Child array: %s\n", array );
        strcpy( array, "Goodbye" );
        printf( "Child array: %s\n", array );
        free( array );
        break;
    case -1:
        printf( "Error with fork()\n" );
        break;
    default:
        printf( "Parent array: %s\n", array );
        sleep(1);
        printf( "Parent array: %s\n", array );
        free( array );
    } …
Run Code Online (Sandbox Code Playgroud)

c linux heap malloc fork

32
推荐指数
2
解决办法
2万
查看次数

一旦两个文件描述符都关闭,Linux是否会自动释放未命名的管道?

我使用一个未命名的管道进行父进程和通过fork()创建的子进程之间的进程间通信.我正在使用unistd.h中包含的pipe()函数

我假设一旦两个文件描述符都被关闭(并且在两个进程中),管道被释放/释放/销毁/等等.但我没有在手册中找到任何明确说明这一点的内容.我正在制作一个可以运行很长时间的程序,所以我想防止内存泄漏和其他类似的事情.

我的函数体看起来像:

int pipefds[2];

pipe( pipefds );

if ( fork() == 0 ) {

    close( pipefds[1] );
    ...
    //Use pipefds[0]
    close( pipefds[0] );

} else {

    close( pipefds[0] );
    ...
    //Use pipefds[1]
    close( pipefds[1] );
}
Run Code Online (Sandbox Code Playgroud)

是否可以安全地假设在此函数终止于子节点和父节点之后,管道已被释放/释放/销毁/等.?

有没有明确说明这一点的文件?

谢谢

c linux pipe

5
推荐指数
2
解决办法
2924
查看次数

我如何tarball proc文件系统?

我想拍摄整个proc文件系统的快照,并将其保存在tarball中(或者在最坏的情况下将所有文本文件连接到一个文本文件中).

但是当我跑步时:

tar -c /proc
Run Code Online (Sandbox Code Playgroud)

我得到了一个段错误.

最好的方法是什么?我应该在每个文件中设置某种递归遍历吗?

我只有基本的*nix实用程序,如bash,cat,ls,echo等.我没有像python或perl或java那样的任何东西.

linux bash tar

4
推荐指数
1
解决办法
2832
查看次数

如何在Python中使用管道文件描述符时检查EOF?

我有2个线程,线程A和线程B.

线程A从sys.stdin或管道的读取端获取数据(使用os.pipe()).无论从sys.stdin还是从管道的读取端读取任何数据,都会在TCP套接字上发送出去.线程A使用select.select()来确定它是应该从sys.stdin还是从管道的读取端读取,而select.select()使用1秒的超时来定期检查并确保套接字连接是还在那儿.

线程B保存管道的写入端,通常只将1个非常长的字符串写入管道,然后关闭写入端.

线程A如何检查管道上的EOF?基本上,我希望线程A在不再使用时关闭管道.但是,我不能冒险阻止管道上的read(),因为sys.stdin上可用的数据将被不必要地阻止.

任何帮助将不胜感激.谢谢!

python linux

3
推荐指数
1
解决办法
4422
查看次数

标签 统计

linux ×4

c ×2

bash ×1

fork ×1

heap ×1

malloc ×1

pipe ×1

python ×1

tar ×1